This example consists of a single periodic task which, after initialization, executes every 100 clock ticks.
rtems_task Periodic_task(rtems_task_argument arg) { rtems_name name; rtems_id period; rtems_status_code status; name = rtems_build_name( 'P', 'E', 'R', 'D' ); status = rtems_rate_monotonic_create( name, &period ); if ( status != RTEMS_STATUS_SUCCESSFUL ) { printf( "rtems_monotonic_create failed with status of %d.\n", rc ); exit( 1 ); } while ( 1 ) { if ( rtems_rate_monotonic_period( period, 100 ) == RTEMS_TIMEOUT ) break; /* Perform some periodic actions */ } /* missed period so delete period and SELF */ status = rtems_rate_monotonic_delete( period ); if ( status != RTEMS_STATUS_SUCCESSFUL ) { printf( "rtems_rate_monotonic_delete failed with status of %d.\n", status ); exit( 1 ); } status = rtems_task_delete( SELF ); /* should not return */ printf( "rtems_task_delete returned with status of %d.\n", status ); exit( 1 ); }
The above task creates a rate monotonic period as
part of its initialization. The first time the loop is
executed, the rtems.rate_monotonic_period
directive will initiate the period for 100 ticks and return
immediately. Subsequent invocations of the
rtems.rate_monotonic_period
directive will result
in the task blocking for the remainder of the 100 tick period.
If, for any reason, the body of the loop takes more than 100
ticks to execute, the rtems.rate_monotonic_period
directive will return the RTEMS.TIMEOUT
status.
If the above task misses its deadline, it will delete the rate
monotonic period and itself.
Copyright © 1988-2007OAR Corporation