From eb9848243380f28bff059915a33aa0fea71b985d Mon Sep 17 00:00:00 2001 From: Petr Benes Date: Sun, 15 May 2011 14:38:01 +0200 Subject: [PATCH] Test_CBS: test updated for testing a basic part of reps_lib API --- src/test_cbs/task.c | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/src/test_cbs/task.c b/src/test_cbs/task.c index 4185b67..dca3ef9 100644 --- a/src/test_cbs/task.c +++ b/src/test_cbs/task.c @@ -9,6 +9,7 @@ #include #include #include +#include @@ -23,11 +24,12 @@ #define T1_SERVER 0 #define T2_SERVER 2 -rtems_asr overrun_handler (rtems_signal_set signals) { +// budget overrun signal handler +rtems_asr signal_handler (rtems_signal_set signals) { printf("SIGNAL kill you \n"); } -void test_loop ( unsigned int id, rtems_name name, unsigned int period_length, unsigned int max_j, uint32_t server, rtems_asr_entry handler) +void test_loop ( unsigned int id, rtems_name name, unsigned int period_length, unsigned int max_j) { rtems_id period; rtems_status_code status; @@ -38,6 +40,7 @@ void test_loop ( unsigned int id, rtems_name name, unsigned int period_length, u void *mem; status = rtems_rate_monotonic_create( name, &period ); + rtems_signal_catch(&signal_handler, RTEMS_DEFAULT_MODES); if ( status != RTEMS_SUCCESSFUL ) { printf( "rtems_monotonic_create failed with status of %d.\n", status); @@ -45,10 +48,9 @@ void test_loop ( unsigned int id, rtems_name name, unsigned int period_length, u } max_i = 1000; - edf_deadline_init(period_length, server, handler); + edf_deadline_init(name, &period); while ( 1 ) { - edf_next_period(); - if (rtems_rate_monotonic_period(period,period_length)==RTEMS_TIMEOUT) + if (edf_next_period(period,period_length, 0)) printf("P%u - Deadline miss", id); rtems_clock_get(RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &start); @@ -76,8 +78,7 @@ void test_loop ( unsigned int id, rtems_name name, unsigned int period_length, u } /* missed period so delete period and SELF */ - status = rtems_rate_monotonic_delete( period ); - edf_deadline_cancel(); + status = edf_deadline_cancel(period); if ( status != RTEMS_SUCCESSFUL ) { printf( "rtems_rate_monotonic_delete failed with status of %d.\n", status ); exit( 0 ); @@ -95,7 +96,7 @@ rtems_task Task_1( { rtems_name name; name = rtems_build_name( 'P', 'E', 'R', 'A' ); - test_loop(1, name, T1_PER,T1_DUR,T1_SERVER, NULL); + test_loop(1, name, T1_PER,T1_DUR); } @@ -103,9 +104,25 @@ rtems_task Task_2( rtems_task_argument argument ) { + rtems_id sid; + reps_params_t p_params; rtems_name name; name = rtems_build_name( 'P', 'E', 'R', 'B' ); - test_loop(2, name, T2_PER,T2_DUR,T2_SERVER, overrun_handler); + // create a server observation + + reps_init(); + p_params.P = T2_PER; + p_params.Q = T2_SERVER; + reps_create_server(&p_params, &sid); + if (reps_attach_thread(sid, Task_2_id) != REPS_OK) + printf("err: attach \n"); + +/* Objects_Locations location; + Thread_Control *the_thread = _Thread_Get(Task_2_id, &location); + RBT_Node *node = (RBT_Node*)the_thread->scheduler_info; + printf("task2 server params Q %d, P %d\n", node->cmp_time, node->rel_deadline);*/ + + test_loop(2, name, T2_PER,T2_DUR); } -- 2.39.2