#define PERIODIC_THREAD_PRIORITY (fosa_get_priority_min() + 5)
#define MAIN_THREAD_PRIORITY (fosa_get_priority_min() + 3)
-#define NUMBER_OF_JUMPS 5
+#define NUMBER_OF_JUMPS 100
typedef struct _results_t
{
double first_jump_interval_ms;
double average_jump_interval_ms;
double min_jump_interval_ms;
+ int iteration_min_jump_interval;
double max_jump_interval_ms;
+ int iteration_max_jump_interval;
double total_jump_interval_ms;
int number_of_jumps;
} results_t;
results.average_jump_interval_ms = results.total_jump_interval_ms/results.number_of_jumps;
printf("------------ RESULTS -------------\n");
- printf("First Time: %6.3f ms Max Time: %6.3f ms Min Time: %6.3f ms\n",
- results.first_jump_interval_ms, results.max_jump_interval_ms, results.min_jump_interval_ms);
+ printf("First Time: %6.3f ms\n Max Time: %6.3f ms Iteration %d Min Time: %6.3f ms Iteration %d\n",
+ results.first_jump_interval_ms, results.max_jump_interval_ms, results.iteration_max_jump_interval,
+ results.min_jump_interval_ms, results.iteration_min_jump_interval);
printf("Average_time: %6.3f ms Total jumps: %d\n", results.average_jump_interval_ms, results.number_of_jumps);
printf("End of test\n");
while (results->number_of_jumps < NUMBER_OF_JUMPS)
{
int jumped = -1;
- struct timespec budget = {1, 400000000}; // 1.4 secs
+ struct timespec budget = {0, 20000000}; // 20 ms
- struct timespec old_activation_timestamp = {-1, -1};
- struct timespec activation_timestamp = {-1, -1};
struct timespec after_jump_timestamp = {-1, -1 };
double jump_interval_ms = 0.0;
jumped = 0;
memset(&before_jump_timestamp, 0, sizeof(before_jump_timestamp) );
- /* For statistical purposes we read the activation time */
- fosa_clock_get_time(FOSA_CLOCK_REALTIME, &old_activation_timestamp);
/* Start of the interruptible block */
/************************************/
/* We arm the jump_timer */
fosa_timer_arm(jump_timer, false, &budget);
+
/* This is the point where the jump returns */
fosa_long_jump_save_context(&context);
if (first_time)
{
results->first_jump_interval_ms = jump_interval_ms;
+
results->max_jump_interval_ms = jump_interval_ms;
+ results->iteration_max_jump_interval = results->number_of_jumps;
+
results->min_jump_interval_ms = jump_interval_ms;
+ results->iteration_min_jump_interval = results->number_of_jumps;
first_time = 0;
}
if (jump_interval_ms > results->max_jump_interval_ms)
{
results->max_jump_interval_ms = jump_interval_ms;
+ results->iteration_max_jump_interval = results->number_of_jumps;
}
if (jump_interval_ms < results->min_jump_interval_ms)
{
results->min_jump_interval_ms = jump_interval_ms;
+ results->iteration_min_jump_interval = results->number_of_jumps;
}
- printf("Jump Iteration: %d\n", results->number_of_jumps);
+ printf("Jump Iteration: %d\r", results->number_of_jumps);
}
-
/* End of interruptible work */
/*****************************/
- printf("After interruptible block\n");
-
- /* Now we measure the time duration of the block */
- /*************************************************/
- fosa_clock_get_time(FOSA_CLOCK_REALTIME, &activation_timestamp);
- decr_timespec(&activation_timestamp, &old_activation_timestamp);
- printf("Execution time: %6.3f\n", t2d(activation_timestamp) );
-
- /* And we program the next loop */
- incr_timespec(&old_activation_timestamp, &period);
- clock_nanosleep(FOSA_CLOCK_REALTIME, TIMER_ABSTIME, &activation_timestamp,
- &old_activation_timestamp);
}
static void work_under_a_interruptible_budget()
{
- struct timespec exec_time = {1, 0}; // 1 seg
-
- printf("Start regular work\n");
-
- frsh_eat(&exec_time);
-
/* This must be measured */
while(1)
{