From ef70d9b652e75326f534d7e66bb3e0bcc55b3b58 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 29 Jan 2002 18:20:59 +0000 Subject: 2001-01-29 Joel Sherrill * Fixed bug where resetting a timer that was not at the head of one of the task timer chains resulted in the Timer Server task waking up too far in the future. * Added rtems_timer_get_information() directive to support testing. * sp31/init.c, sp31/system.h, sp31/task1.c: Modified to test for above condition. --- testsuites/sptests/sp31/task1.c | 74 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 71 insertions(+), 3 deletions(-) (limited to 'testsuites/sptests/sp31/task1.c') diff --git a/testsuites/sptests/sp31/task1.c b/testsuites/sptests/sp31/task1.c index f66f0f2aa5..2e21b15dce 100644 --- a/testsuites/sptests/sp31/task1.c +++ b/testsuites/sptests/sp31/task1.c @@ -24,9 +24,11 @@ rtems_task Task_1( rtems_task_argument argument ) { - rtems_id tmid; - rtems_time_of_day time; - rtems_status_code status; + rtems_id tmid; + rtems_id tmid2; + rtems_time_of_day time; + rtems_status_code status; + rtems_timer_information info; /* Get id */ @@ -35,6 +37,72 @@ rtems_task Task_1( directive_failed( status, "rtems_timer_ident" ); printf( "TA1 - timer 1 has id (0x%x)\n", tmid ); + puts( "TA1 - rtems_timer_ident - identing timer 2" ); + status = rtems_timer_ident( Timer_name[ 2 ], &tmid2 ); + directive_failed( status, "rtems_timer_ident" ); + printf( "TA1 - timer 2 has id (0x%x)\n", tmid2 ); + +/* now check that rescheduling an active timer works OK. */ + puts( "TA1 - rtems_timer_server_fire_after - timer 1 in 30 seconds" ); + status = rtems_timer_server_fire_after( + tmid, 30 * TICKS_PER_SECOND, Delayed_resume, NULL ); + directive_failed( status, "rtems_timer_server_fire_after" ); + + puts( "TA1 - rtems_timer_server_fire_after - timer 2 in 60 seconds" ); + status = rtems_timer_server_fire_after( + tmid2, 60 * TICKS_PER_SECOND, Delayed_resume, NULL ); + directive_failed( status, "rtems_timer_server_fire_after" ); + + status = rtems_timer_get_information( tmid, &info ); + printf( "Timer 1 scheduled for %d ticks since boot\n", + info.start_time + info.initial ); + printf( "Timer Server scheduled for %d ticks since boot\n", + _Timer_Server->Timer.initial + _Timer_Server->Timer.start_time ); + + puts( "TA1 - rtems_task_wake_after - 1 second" ); + status = rtems_task_wake_after( 1 * TICKS_PER_SECOND ); + directive_failed( status, "rtems_timer_wake_after" ); + + puts( "TA1 - rtems_timer_server_fire_after - timer 2 in 60 seconds" ); + status = rtems_timer_server_fire_after( + tmid2, 60 * TICKS_PER_SECOND, Delayed_resume, NULL ); + directive_failed( status, "rtems_timer_server_fire_after" ); + + status = rtems_timer_get_information( tmid, &info ); + directive_failed( status, "rtems_timer_get_information" ); + printf( "Timer 1 scheduled for %d ticks since boot\n", + info.start_time + info.initial ); + printf( "Timer Server scheduled for %d ticks since boot\n", + _Timer_Server->Timer.initial + _Timer_Server->Timer.start_time ); + assert( (info.start_time + info.initial) == + (_Timer_Server->Timer.initial + _Timer_Server->Timer.start_time) ); + + puts( "TA1 - rtems_task_wake_after - 1 second" ); + status = rtems_task_wake_after( 1 * TICKS_PER_SECOND ); + directive_failed( status, "rtems_timer_wake_after" ); + + puts( "TA1 - rtems_timer_server_fire_after - timer 2 in 60 seconds" ); + status = rtems_timer_server_fire_after( + tmid2, 60 * TICKS_PER_SECOND, Delayed_resume, NULL ); + directive_failed( status, "rtems_timer_server_fire_after" ); + + status = rtems_timer_get_information( tmid, &info ); + directive_failed( status, "rtems_timer_get_information" ); + printf( "Timer 1 scheduled for %d ticks since boot\n", + info.start_time + info.initial ); + printf( "Timer Server scheduled for %d ticks since boot\n", + _Timer_Server->Timer.initial + _Timer_Server->Timer.start_time ); + assert( (info.start_time + info.initial) == + (_Timer_Server->Timer.initial + _Timer_Server->Timer.start_time) ); + + puts( "TA1 - rtems_timer_cancel - timer 1" ); + status = rtems_timer_cancel( tmid ); + directive_failed( status, "rtems_timer_cancel" ); + + puts( "TA1 - rtems_timer_cancel - timer 2" ); + status = rtems_timer_cancel( tmid2 ); + directive_failed( status, "rtems_timer_cancel" ); + /* after which is allowed to fire */ Print_time(); -- cgit v1.2.3