From 1161ed179c0be212b7909d6a761bfc31cacf4ca3 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Mon, 30 Jan 2017 14:22:14 +0100 Subject: c-user: Update timer manager Update #2554. --- c-user/timer_manager.rst | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/c-user/timer_manager.rst b/c-user/timer_manager.rst index 000348d..1e29add 100644 --- a/c-user/timer_manager.rst +++ b/c-user/timer_manager.rst @@ -65,9 +65,10 @@ Timer Server ------------ The Timer Server task is responsible for executing the timer service routines -associated with all task-based timers. This task executes at a priority higher -than any RTEMS application task, and is created non-preemptible, and thus can -be viewed logically as the lowest priority interrupt. +associated with all task-based timers. This task executes at a priority +specified by :ref:`rtems_timer_initiate_server() ` +and it may have a priority of zero (the highest priority). In uni-processor +configurations, it is created non-preemptible. By providing a mechanism where timer service routines execute in task rather than interrupt space, the application is allowed a bit more flexibility in what @@ -75,9 +76,10 @@ operations a timer service routine can perform. For example, the Timer Server can be configured to have a floating point context in which case it would be safe to perform floating point operations from a task-based timer. Most of the time, executing floating point instructions from an interrupt service routine -is not considered safe. However, since the Timer Server task is -non-preemptible, only directives allowed from an ISR can be called in the timer -service routine. +is not considered safe. The timer service routines invoked by the Timer Server +may block, however, since this blocks the Timer Server itself, other timer +service routines that are already pending do not run until the blocked timer +service routine finished its work. The Timer Server is designed to remain blocked until a task-based timer fires. This reduces the execution overhead of the Timer Server. @@ -227,7 +229,12 @@ DESCRIPTION: local TMCB free pool and initializes it. NOTES: - This directive will not cause the calling task to be preempted. + This directive will obtain the allocator mutex and may cause the calling + task to be preempted. + + In SMP configurations, the processor of the currently executing thread + determines the processor used for the created timer. During the life-time + of the timer this processor is used to manage the timer internally. .. raw:: latex @@ -337,7 +344,8 @@ DESCRIPTION: by RTEMS. NOTES: - This directive will not cause the running task to be preempted. + This directive will obtain the allocator mutex and may cause the calling + task to be preempted. A timer can be deleted by a task other than the task which created the timer. -- cgit v1.2.3