forked from Imagelibrary/rtems
2001-01-29 Joel Sherrill <joel@OARcorp.com>
* 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.
This commit is contained in:
@@ -1,3 +1,12 @@
|
|||||||
|
2001-01-29 Joel Sherrill <joel@OARcorp.com>
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
2001-01-22 Joel Sherrill <joel@OARcorp.com>
|
2001-01-22 Joel Sherrill <joel@OARcorp.com>
|
||||||
|
|
||||||
* sp09/screen14.c, sp09/sp09.scn, sp30/init.c, sp31/init.c: Modified
|
* sp09/screen14.c, sp09/sp09.scn, sp30/init.c, sp31/init.c: Modified
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ rtems_task Init(
|
|||||||
|
|
||||||
Task_name[ 1 ] = rtems_build_name( 'T', 'A', '1', ' ' );
|
Task_name[ 1 ] = rtems_build_name( 'T', 'A', '1', ' ' );
|
||||||
Timer_name[ 1 ] = rtems_build_name( 'T', 'M', '1', ' ' );
|
Timer_name[ 1 ] = rtems_build_name( 'T', 'M', '1', ' ' );
|
||||||
|
Timer_name[ 2 ] = rtems_build_name( 'T', 'M', '2', ' ' );
|
||||||
|
|
||||||
status = rtems_task_create(
|
status = rtems_task_create(
|
||||||
Task_name[ 1 ],
|
Task_name[ 1 ],
|
||||||
@@ -64,9 +65,13 @@ rtems_task Init(
|
|||||||
puts( "INIT - rtems_timer_create - creating timer 1" );
|
puts( "INIT - rtems_timer_create - creating timer 1" );
|
||||||
status = rtems_timer_create( Timer_name[ 1 ], &Timer_id[ 1 ] );
|
status = rtems_timer_create( Timer_name[ 1 ], &Timer_id[ 1 ] );
|
||||||
directive_failed( status, "rtems_timer_create" );
|
directive_failed( status, "rtems_timer_create" );
|
||||||
|
|
||||||
printf( "INIT - timer 1 has id (0x%x)\n", Timer_id[ 1 ] );
|
printf( "INIT - timer 1 has id (0x%x)\n", Timer_id[ 1 ] );
|
||||||
|
|
||||||
|
puts( "INIT - rtems_timer_create - creating timer 2" );
|
||||||
|
status = rtems_timer_create( Timer_name[ 2 ], &Timer_id[ 2 ] );
|
||||||
|
directive_failed( status, "rtems_timer_create" );
|
||||||
|
printf( "INIT - timer 2 has id (0x%x)\n", Timer_id[ 2 ] );
|
||||||
|
|
||||||
status = rtems_task_delete( RTEMS_SELF );
|
status = rtems_task_delete( RTEMS_SELF );
|
||||||
directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
|
directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ rtems_task Task_1(
|
|||||||
TEST_EXTERN rtems_id Task_id[ 4 ]; /* array of task ids */
|
TEST_EXTERN rtems_id Task_id[ 4 ]; /* array of task ids */
|
||||||
TEST_EXTERN rtems_name Task_name[ 4 ]; /* array of task names */
|
TEST_EXTERN rtems_name Task_name[ 4 ]; /* array of task names */
|
||||||
|
|
||||||
TEST_EXTERN rtems_id Timer_id[ 2 ]; /* array of timer ids */
|
TEST_EXTERN rtems_id Timer_id[ 3 ]; /* array of timer ids */
|
||||||
TEST_EXTERN rtems_name Timer_name[ 2 ]; /* array of timer names */
|
TEST_EXTERN rtems_name Timer_name[ 3 ]; /* array of timer names */
|
||||||
|
|
||||||
/* end of include file */
|
/* end of include file */
|
||||||
|
|||||||
@@ -24,9 +24,11 @@ rtems_task Task_1(
|
|||||||
rtems_task_argument argument
|
rtems_task_argument argument
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
rtems_id tmid;
|
rtems_id tmid;
|
||||||
rtems_time_of_day time;
|
rtems_id tmid2;
|
||||||
rtems_status_code status;
|
rtems_time_of_day time;
|
||||||
|
rtems_status_code status;
|
||||||
|
rtems_timer_information info;
|
||||||
|
|
||||||
/* Get id */
|
/* Get id */
|
||||||
|
|
||||||
@@ -35,6 +37,72 @@ rtems_task Task_1(
|
|||||||
directive_failed( status, "rtems_timer_ident" );
|
directive_failed( status, "rtems_timer_ident" );
|
||||||
printf( "TA1 - timer 1 has id (0x%x)\n", tmid );
|
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 */
|
/* after which is allowed to fire */
|
||||||
|
|
||||||
Print_time();
|
Print_time();
|
||||||
|
|||||||
@@ -1,3 +1,12 @@
|
|||||||
|
2001-01-29 Joel Sherrill <joel@OARcorp.com>
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
2001-01-22 Joel Sherrill <joel@OARcorp.com>
|
2001-01-22 Joel Sherrill <joel@OARcorp.com>
|
||||||
|
|
||||||
* sp09/screen14.c, sp09/sp09.scn, sp30/init.c, sp31/init.c: Modified
|
* sp09/screen14.c, sp09/sp09.scn, sp30/init.c, sp31/init.c: Modified
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ rtems_task Init(
|
|||||||
|
|
||||||
Task_name[ 1 ] = rtems_build_name( 'T', 'A', '1', ' ' );
|
Task_name[ 1 ] = rtems_build_name( 'T', 'A', '1', ' ' );
|
||||||
Timer_name[ 1 ] = rtems_build_name( 'T', 'M', '1', ' ' );
|
Timer_name[ 1 ] = rtems_build_name( 'T', 'M', '1', ' ' );
|
||||||
|
Timer_name[ 2 ] = rtems_build_name( 'T', 'M', '2', ' ' );
|
||||||
|
|
||||||
status = rtems_task_create(
|
status = rtems_task_create(
|
||||||
Task_name[ 1 ],
|
Task_name[ 1 ],
|
||||||
@@ -64,9 +65,13 @@ rtems_task Init(
|
|||||||
puts( "INIT - rtems_timer_create - creating timer 1" );
|
puts( "INIT - rtems_timer_create - creating timer 1" );
|
||||||
status = rtems_timer_create( Timer_name[ 1 ], &Timer_id[ 1 ] );
|
status = rtems_timer_create( Timer_name[ 1 ], &Timer_id[ 1 ] );
|
||||||
directive_failed( status, "rtems_timer_create" );
|
directive_failed( status, "rtems_timer_create" );
|
||||||
|
|
||||||
printf( "INIT - timer 1 has id (0x%x)\n", Timer_id[ 1 ] );
|
printf( "INIT - timer 1 has id (0x%x)\n", Timer_id[ 1 ] );
|
||||||
|
|
||||||
|
puts( "INIT - rtems_timer_create - creating timer 2" );
|
||||||
|
status = rtems_timer_create( Timer_name[ 2 ], &Timer_id[ 2 ] );
|
||||||
|
directive_failed( status, "rtems_timer_create" );
|
||||||
|
printf( "INIT - timer 2 has id (0x%x)\n", Timer_id[ 2 ] );
|
||||||
|
|
||||||
status = rtems_task_delete( RTEMS_SELF );
|
status = rtems_task_delete( RTEMS_SELF );
|
||||||
directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
|
directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ rtems_task Task_1(
|
|||||||
TEST_EXTERN rtems_id Task_id[ 4 ]; /* array of task ids */
|
TEST_EXTERN rtems_id Task_id[ 4 ]; /* array of task ids */
|
||||||
TEST_EXTERN rtems_name Task_name[ 4 ]; /* array of task names */
|
TEST_EXTERN rtems_name Task_name[ 4 ]; /* array of task names */
|
||||||
|
|
||||||
TEST_EXTERN rtems_id Timer_id[ 2 ]; /* array of timer ids */
|
TEST_EXTERN rtems_id Timer_id[ 3 ]; /* array of timer ids */
|
||||||
TEST_EXTERN rtems_name Timer_name[ 2 ]; /* array of timer names */
|
TEST_EXTERN rtems_name Timer_name[ 3 ]; /* array of timer names */
|
||||||
|
|
||||||
/* end of include file */
|
/* end of include file */
|
||||||
|
|||||||
@@ -24,9 +24,11 @@ rtems_task Task_1(
|
|||||||
rtems_task_argument argument
|
rtems_task_argument argument
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
rtems_id tmid;
|
rtems_id tmid;
|
||||||
rtems_time_of_day time;
|
rtems_id tmid2;
|
||||||
rtems_status_code status;
|
rtems_time_of_day time;
|
||||||
|
rtems_status_code status;
|
||||||
|
rtems_timer_information info;
|
||||||
|
|
||||||
/* Get id */
|
/* Get id */
|
||||||
|
|
||||||
@@ -35,6 +37,72 @@ rtems_task Task_1(
|
|||||||
directive_failed( status, "rtems_timer_ident" );
|
directive_failed( status, "rtems_timer_ident" );
|
||||||
printf( "TA1 - timer 1 has id (0x%x)\n", tmid );
|
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 */
|
/* after which is allowed to fire */
|
||||||
|
|
||||||
Print_time();
|
Print_time();
|
||||||
|
|||||||
Reference in New Issue
Block a user