10.3. Operations#
10.3.1. Creating a Timer#
The rtems_timer_create
directive creates a timer by allocating a Timer
Control Block (TMCB), assigning the timer a user-specified name, and assigning
it a timer ID. Newly created timers do not have a timer service routine
associated with them and are not active.
10.3.2. Obtaining Timer IDs#
When a timer is created, RTEMS generates a unique timer ID and assigns it to
the created timer until it is deleted. The timer ID may be obtained by either
of two methods. First, as the result of an invocation of the
rtems_timer_create
directive, the timer ID is stored in a user provided
location. Second, the timer ID may be obtained later using the
rtems_timer_ident
directive. The timer ID is used by other directives to
manipulate this timer.
10.3.3. Initiating an Interval Timer#
The rtems_timer_fire_after
and rtems_timer_server_fire_after
directives
initiate a timer to fire a user provided timer service routine after the
specified number of clock ticks have elapsed. When the interval has elapsed,
the timer service routine will be invoked from a clock tick
directive if it was initiated by the rtems_timer_fire_after
directive and
from the Timer Server task if initiated by the
rtems_timer_server_fire_after
directive.
10.3.4. Initiating a Time of Day Timer#
The rtems_timer_fire_when
and rtems_timer_server_fire_when
directive
initiate a timer to fire a user provided timer service routine when the
specified time of day has been reached. When the interval has elapsed, the
timer service routine will be invoked from a clock tick directive
by the rtems_timer_fire_when
directive and from the Timer Server task if
initiated by the rtems_timer_server_fire_when
directive.
10.3.5. Canceling a Timer#
The rtems_timer_cancel
directive is used to halt the specified timer. Once
canceled, the timer service routine will not fire unless the timer is
reinitiated. The timer can be reinitiated using the rtems_timer_reset
,
rtems_timer_fire_after
, and rtems_timer_fire_when
directives.
10.3.6. Resetting a Timer#
The rtems_timer_reset
directive is used to restore an interval timer
initiated by a previous invocation of rtems_timer_fire_after
or
rtems_timer_server_fire_after
to its original interval length. If the
timer has not been used or the last usage of this timer was by the
rtems_timer_fire_when
or rtems_timer_server_fire_when
directive, then
an error is returned. The timer service routine is not changed or fired by
this directive.
10.3.7. Initiating the Timer Server#
The rtems_timer_initiate_server
directive is used to allocate and start the
execution of the Timer Server task. The application can specify both the stack
size and attributes of the Timer Server. The Timer Server executes at a
priority higher than any application task and thus the user can expect to be
preempted as the result of executing the rtems_timer_initiate_server
directive.
10.3.8. Deleting a Timer#
The rtems_timer_delete
directive is used to delete a timer. If the timer
is running and has not expired, the timer is automatically canceled. The
timer’s control block is returned to the TMCB free list when it is deleted. A
timer can be deleted by a task other than the task which created the timer.
Any subsequent references to the timer’s name and ID are invalid.