diff options
Diffstat (limited to 'testsuites/sptests/spcbssched03/tasks_aperiodic.c')
-rw-r--r-- | testsuites/sptests/spcbssched03/tasks_aperiodic.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/testsuites/sptests/spcbssched03/tasks_aperiodic.c b/testsuites/sptests/spcbssched03/tasks_aperiodic.c new file mode 100644 index 0000000000..f8c302745a --- /dev/null +++ b/testsuites/sptests/spcbssched03/tasks_aperiodic.c @@ -0,0 +1,48 @@ +/* Tasks_Aperiodic + * + * This routine serves as a test task for the CBS scheduler + * implementation. This is for aperiodic task execution. + * + * Input parameters: + * argument - task argument + * + * Output parameters: NONE + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#include "system.h" + +rtems_task Tasks_Aperiodic( + rtems_task_argument argument +) +{ + rtems_status_code status; + int start, stop, now; + + put_name( Task_name[ argument ], FALSE ); + + status = rtems_task_wake_after( 2 + Phases[argument] ); + directive_failed( status, "rtems_task_wake_after" ); + + rtems_clock_get(RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &start); + printf("AT%" PRIdPTR "-S ticks:%d\n", argument, start); + /* active computing */ + + while(FOREVER) { + rtems_clock_get(RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &now); + if (now >= start + Execution[argument]) break; + } + rtems_clock_get(RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &stop); + printf("P%" PRIdPTR "-F ticks:%d\n", argument, stop); + + /* delete SELF */ + fflush(stdout); + printf( "Killing task %" PRIdPTR "\n", argument); + status = rtems_task_delete(RTEMS_SELF); + directive_failed(status, "rtems_task_delete of RTEMS_SELF"); +} |