summaryrefslogtreecommitdiffstats
path: root/c-user/task_manager.rst
diff options
context:
space:
mode:
Diffstat (limited to 'c-user/task_manager.rst')
-rw-r--r--c-user/task_manager.rst1571
1 files changed, 782 insertions, 789 deletions
diff --git a/c-user/task_manager.rst b/c-user/task_manager.rst
index f88e660..beaef3b 100644
--- a/c-user/task_manager.rst
+++ b/c-user/task_manager.rst
@@ -37,9 +37,9 @@ and administer tasks. The directives provided by the task manager are:
- rtems_task_mode_ - Change current task's mode
-- rtems_task_get_note_ - Get task notepad entry
+- rtems_task_get_note_ - Get task notepad entry
-- rtems_task_set_note_ - Set task notepad entry
+- rtems_task_set_note_ - Set task notepad entry
- rtems_task_wake_after_ - Wake up after interval
@@ -590,530 +590,532 @@ This section details the task manager's directives. A subsection is dedicated
to each of this manager's directives and describes the calling sequence,
related constants, usage, and status codes.
+.. raw:: latex
+
+ \clearpage
+
.. _rtems_task_create:
TASK_CREATE - Create a task
---------------------------
.. index:: create a task
-
-**CALLING SEQUENCE:**
-
.. index:: rtems_task_create
-.. code-block:: c
-
- rtems_status_code rtems_task_create(
- rtems_name name,
- rtems_task_priority initial_priority,
- size_t stack_size,
- rtems_mode initial_modes,
- rtems_attribute attribute_set,
- rtems_id *id
- );
-
-**DIRECTIVE STATUS CODES:**
-
-.. list-table::
- :class: rtems-table
-
- * - ``RTEMS_SUCCESSFUL``
- - task created successfully
- * - ``RTEMS_INVALID_ADDRESS``
- - ``id`` is NULL
- * - ``RTEMS_INVALID_NAME``
- - invalid task name
- * - ``RTEMS_INVALID_PRIORITY``
- - invalid task priority
- * - ``RTEMS_MP_NOT_CONFIGURED``
- - multiprocessing not configured
- * - ``RTEMS_TOO_MANY``
- - too many tasks created
- * - ``RTEMS_UNSATISFIED``
- - not enough memory for stack/FP context
- * - ``RTEMS_TOO_MANY``
- - too many global objects
-
-**DESCRIPTION:**
-
-This directive creates a task which resides on the local node. It allocates
-and initializes a TCB, a stack, and an optional floating point context area.
-The mode parameter contains values which sets the task's initial execution
-mode. The ``RTEMS_FLOATING_POINT`` attribute should be specified if the
-created task is to use a numeric coprocessor. For performance reasons, it is
-recommended that tasks not using the numeric coprocessor should specify the
-``RTEMS_NO_FLOATING_POINT`` attribute. If the ``RTEMS_GLOBAL`` attribute is
-specified, the task can be accessed from remote nodes. The task id, returned
-in id, is used in other task related directives to access the task. When
-created, a task is placed in the dormant state and can only be made ready to
-execute using the directive ``rtems_task_start``.
-
-**NOTES:**
-
-This directive will not cause the calling task to be preempted.
-
-Valid task priorities range from a high of 1 to a low of 255.
-
-If the requested stack size is less than the configured minimum stack size,
-then RTEMS will use the configured minimum as the stack size for this task. In
-addition to being able to specify the task stack size as a integer, there are
-two constants which may be specified:
-
-``RTEMS_MINIMUM_STACK_SIZE``
- The minimum stack size *RECOMMENDED* for use on this processor. This value
- is selected by the RTEMS developers conservatively to minimize the risk of
- blown stacks for most user applications. Using this constant when specifying
- the task stack size, indicates that the stack size will be at least
- ``RTEMS_MINIMUM_STACK_SIZE`` bytes in size. If the user configured minimum
- stack size is larger than the recommended minimum, then it will be used.
-
-``RTEMS_CONFIGURED_MINIMUM_STACK_SIZE``
- Indicates this task is to be created with a stack size of the minimum stack
- size that was configured by the application. If not explicitly configured by
- the application, the default configured minimum stack size is the processor
- dependent value ``RTEMS_MINIMUM_STACK_SIZE``. Since this uses the configured
- minimum stack size value, you may get a stack size that is smaller or larger
- than the recommended minimum. This can be used to provide large stacks for
- all tasks on complex applications or small stacks on applications that are
- trying to conserve memory.
-
-Application developers should consider the stack usage of the device drivers
-when calculating the stack size required for tasks which utilize the driver.
-
-The following task attribute constants are defined by RTEMS:
-
-.. list-table::
- :class: rtems-table
-
- * - ``RTEMS_NO_FLOATING_POINT``
- - does not use coprocessor (default)
- * - ``RTEMS_FLOATING_POINT``
- - uses numeric coprocessor
- * - ``RTEMS_LOCAL``
- - local task (default)
- * - ``RTEMS_GLOBAL``
- - global task
-
-The following task mode constants are defined by RTEMS:
-
-.. list-table::
- :class: rtems-table
-
- * - ``RTEMS_PREEMPT``
- - enable preemption (default)
- * - ``RTEMS_NO_PREEMPT``
- - disable preemption
- * - ``RTEMS_NO_TIMESLICE``
- - disable timeslicing (default)
- * - ``RTEMS_TIMESLICE``
- - enable timeslicing
- * - ``RTEMS_ASR``
- - enable ASR processing (default)
- * - ``RTEMS_NO_ASR``
- - disable ASR processing
- * - ``RTEMS_INTERRUPT_LEVEL(0)``
- - enable all interrupts (default)
- * - ``RTEMS_INTERRUPT_LEVEL(n)``
- - execute at interrupt level n
-
-The interrupt level portion of the task execution mode supports a maximum of
-256 interrupt levels. These levels are mapped onto the interrupt levels
-actually supported by the target processor in a processor dependent fashion.
-
-Tasks should not be made global unless remote tasks must interact with them.
-This avoids the system overhead incurred by the creation of a global task.
-When a global task is created, the task's name and id must be transmitted to
-every node in the system for insertion in the local copy of the global object
-table.
-
-The total number of global objects, including tasks, is limited by the
-maximum_global_objects field in the Configuration Table.
+CALLING SEQUENCE:
+ .. code-block:: c
+
+ rtems_status_code rtems_task_create(
+ rtems_name name,
+ rtems_task_priority initial_priority,
+ size_t stack_size,
+ rtems_mode initial_modes,
+ rtems_attribute attribute_set,
+ rtems_id *id
+ );
+
+DIRECTIVE STATUS CODES:
+ .. list-table::
+ :class: rtems-table
+
+ * - ``RTEMS_SUCCESSFUL``
+ - task created successfully
+ * - ``RTEMS_INVALID_ADDRESS``
+ - ``id`` is NULL
+ * - ``RTEMS_INVALID_NAME``
+ - invalid task name
+ * - ``RTEMS_INVALID_PRIORITY``
+ - invalid task priority
+ * - ``RTEMS_MP_NOT_CONFIGURED``
+ - multiprocessing not configured
+ * - ``RTEMS_TOO_MANY``
+ - too many tasks created
+ * - ``RTEMS_UNSATISFIED``
+ - not enough memory for stack/FP context
+ * - ``RTEMS_TOO_MANY``
+ - too many global objects
+
+DESCRIPTION:
+ This directive creates a task which resides on the local node. It
+ allocates and initializes a TCB, a stack, and an optional floating point
+ context area. The mode parameter contains values which sets the task's
+ initial execution mode. The ``RTEMS_FLOATING_POINT`` attribute should be
+ specified if the created task is to use a numeric coprocessor. For
+ performance reasons, it is recommended that tasks not using the numeric
+ coprocessor should specify the ``RTEMS_NO_FLOATING_POINT`` attribute. If
+ the ``RTEMS_GLOBAL`` attribute is specified, the task can be accessed from
+ remote nodes. The task id, returned in id, is used in other task related
+ directives to access the task. When created, a task is placed in the
+ dormant state and can only be made ready to execute using the directive
+ ``rtems_task_start``.
+
+NOTES:
+ This directive will not cause the calling task to be preempted.
+
+ Valid task priorities range from a high of 1 to a low of 255.
+
+ If the requested stack size is less than the configured minimum stack size,
+ then RTEMS will use the configured minimum as the stack size for this task.
+ In addition to being able to specify the task stack size as a integer,
+ there are two constants which may be specified:
+
+ ``RTEMS_MINIMUM_STACK_SIZE``
+ The minimum stack size *RECOMMENDED* for use on this processor. This
+ value is selected by the RTEMS developers conservatively to minimize the
+ risk of blown stacks for most user applications. Using this constant
+ when specifying the task stack size, indicates that the stack size will
+ be at least ``RTEMS_MINIMUM_STACK_SIZE`` bytes in size. If the user
+ configured minimum stack size is larger than the recommended minimum,
+ then it will be used.
+
+ ``RTEMS_CONFIGURED_MINIMUM_STACK_SIZE``
+ Indicates this task is to be created with a stack size of the minimum
+ stack size that was configured by the application. If not explicitly
+ configured by the application, the default configured minimum stack size
+ is the processor dependent value ``RTEMS_MINIMUM_STACK_SIZE``. Since
+ this uses the configured minimum stack size value, you may get a stack
+ size that is smaller or larger than the recommended minimum. This can be
+ used to provide large stacks for all tasks on complex applications or
+ small stacks on applications that are trying to conserve memory.
+
+ Application developers should consider the stack usage of the device
+ drivers when calculating the stack size required for tasks which utilize
+ the driver.
+
+ The following task attribute constants are defined by RTEMS:
+
+ .. list-table::
+ :class: rtems-table
+
+ * - ``RTEMS_NO_FLOATING_POINT``
+ - does not use coprocessor (default)
+ * - ``RTEMS_FLOATING_POINT``
+ - uses numeric coprocessor
+ * - ``RTEMS_LOCAL``
+ - local task (default)
+ * - ``RTEMS_GLOBAL``
+ - global task
+
+ The following task mode constants are defined by RTEMS:
+
+ .. list-table::
+ :class: rtems-table
+
+ * - ``RTEMS_PREEMPT``
+ - enable preemption (default)
+ * - ``RTEMS_NO_PREEMPT``
+ - disable preemption
+ * - ``RTEMS_NO_TIMESLICE``
+ - disable timeslicing (default)
+ * - ``RTEMS_TIMESLICE``
+ - enable timeslicing
+ * - ``RTEMS_ASR``
+ - enable ASR processing (default)
+ * - ``RTEMS_NO_ASR``
+ - disable ASR processing
+ * - ``RTEMS_INTERRUPT_LEVEL(0)``
+ - enable all interrupts (default)
+ * - ``RTEMS_INTERRUPT_LEVEL(n)``
+ - execute at interrupt level ``n``
+
+ The interrupt level portion of the task execution mode supports a maximum
+ of 256 interrupt levels. These levels are mapped onto the interrupt
+ levels actually supported by the target processor in a processor dependent
+ fashion.
+
+ Tasks should not be made global unless remote tasks must interact with
+ them. This avoids the system overhead incurred by the creation of a
+ global task. When a global task is created, the task's name and id must
+ be transmitted to every node in the system for insertion in the local copy
+ of the global object table.
+
+ The total number of global objects, including tasks, is limited by the
+ maximum_global_objects field in the Configuration Table.
+
+.. raw:: latex
+
+ \clearpage
.. _rtems_task_ident:
TASK_IDENT - Get ID of a task
-----------------------------
.. index:: get ID of a task
-
-**CALLING SEQUENCE:**
-
.. index:: rtems_task_ident
-.. code-block:: c
-
- rtems_status_code rtems_task_ident(
- rtems_name name,
- uint32_t node,
- rtems_id *id
- );
+CALLING SEQUENCE:
+ .. code-block:: c
-**DIRECTIVE STATUS CODES:**
+ rtems_status_code rtems_task_ident(
+ rtems_name name,
+ uint32_t node,
+ rtems_id *id
+ );
-.. list-table::
- :class: rtems-table
+DIRECTIVE STATUS CODES:
+ .. list-table::
+ :class: rtems-table
- * - ``RTEMS_SUCCESSFUL``
- - task identified successfully
- * - ``RTEMS_INVALID_ADDRESS``
- - ``id`` is NULL
- * - ``RTEMS_INVALID_NAME``
- - invalid task name
- * - ``RTEMS_INVALID_NODE``
- - invalid node id
+ * - ``RTEMS_SUCCESSFUL``
+ - task identified successfully
+ * - ``RTEMS_INVALID_ADDRESS``
+ - ``id`` is NULL
+ * - ``RTEMS_INVALID_NAME``
+ - invalid task name
+ * - ``RTEMS_INVALID_NODE``
+ - invalid node id
-**DESCRIPTION:**
+DESCRIPTION:
+ This directive obtains the task id associated with the task name specified
+ in name. A task may obtain its own id by specifying ``RTEMS_SELF`` or its
+ own task name in name. If the task name is not unique, then the task id
+ returned will match one of the tasks with that name. However, this task id
+ is not guaranteed to correspond to the desired task. The task id, returned
+ in id, is used in other task related directives to access the task.
-This directive obtains the task id associated with the task name specified in
-name. A task may obtain its own id by specifying ``RTEMS_SELF`` or its own
-task name in name. If the task name is not unique, then the task id returned
-will match one of the tasks with that name. However, this task id is not
-guaranteed to correspond to the desired task. The task id, returned in id, is
-used in other task related directives to access the task.
+NOTES:
+ This directive will not cause the running task to be preempted.
-**NOTES:**
+ If node is ``RTEMS_SEARCH_ALL_NODES``, all nodes are searched with the
+ local node being searched first. All other nodes are searched with the
+ lowest numbered node searched first.
-This directive will not cause the running task to be preempted.
+ If node is a valid node number which does not represent the local node,
+ then only the tasks exported by the designated node are searched.
-If node is ``RTEMS_SEARCH_ALL_NODES``, all nodes are searched with the local
-node being searched first. All other nodes are searched with the lowest
-numbered node searched first.
+ This directive does not generate activity on remote nodes. It accesses
+ only the local copy of the global object table.
-If node is a valid node number which does not represent the local node, then
-only the tasks exported by the designated node are searched.
+.. raw:: latex
-This directive does not generate activity on remote nodes. It accesses only
-the local copy of the global object table.
+ \clearpage
.. _rtems_task_self:
TASK_SELF - Obtain ID of caller
-------------------------------
.. index:: obtain ID of caller
-
-**CALLING SEQUENCE:**
-
.. index:: rtems_task_self
-.. code-block:: c
-
- rtems_id rtems_task_self(void);
+CALLING SEQUENCE:
+ .. code-block:: c
-**DIRECTIVE STATUS CODES:**
+ rtems_id rtems_task_self(void);
-Returns the object Id of the calling task.
+DIRECTIVE STATUS CODES:
+ Returns the object Id of the calling task.
-**DESCRIPTION:**
+DESCRIPTION:
+ This directive returns the Id of the calling task.
-This directive returns the Id of the calling task.
+NOTES:
+ If called from an interrupt service routine, this directive will return the
+ Id of the interrupted task.
-**NOTES:**
+.. raw:: latex
-If called from an interrupt service routine, this directive will return the Id
-of the interrupted task.
+ \clearpage
.. _rtems_task_start:
TASK_START - Start a task
-------------------------
.. index:: starting a task
-
-**CALLING SEQUENCE:**
-
.. index:: rtems_task_start
-.. code-block:: c
-
- rtems_status_code rtems_task_start(
- rtems_id id,
- rtems_task_entry entry_point,
- rtems_task_argument argument
- );
-
-**DIRECTIVE STATUS CODES:**
-
-.. list-table::
- :class: rtems-table
-
- * - ``RTEMS_SUCCESSFUL``
- - ask started successfully
- * - ``RTEMS_INVALID_ADDRESS``
- - invalid task entry point
- * - ``RTEMS_INVALID_ID``
- - invalid task id
- * - ``RTEMS_INCORRECT_STATE``
- - task not in the dormant state
- * - ``RTEMS_ILLEGAL_ON_REMOTE_OBJECT``
- - cannot start remote task
-
-**DESCRIPTION:**
-
-This directive readies the task, specified by ``id``, for execution based on
-the priority and execution mode specified when the task was created. The
-starting address of the task is given in ``entry_point``. The task's starting
-argument is contained in argument. This argument can be a single value or used
-as an index into an array of parameter blocks. The type of this numeric
-argument is an unsigned integer type with the property that any valid pointer
-to void can be converted to this type and then converted back to a pointer to
-void. The result will compare equal to the original pointer.
-
-**NOTES:**
-
-The calling task will be preempted if its preemption mode is enabled and the
-task being started has a higher priority.
-
-Any actions performed on a dormant task such as suspension or change of
-priority are nullified when the task is initiated via the ``rtems_task_start``
-directive.
+CALLING SEQUENCE:
+ .. code-block:: c
+
+ rtems_status_code rtems_task_start(
+ rtems_id id,
+ rtems_task_entry entry_point,
+ rtems_task_argument argument
+ );
+
+DIRECTIVE STATUS CODES:
+ .. list-table::
+ :class: rtems-table
+
+ * - ``RTEMS_SUCCESSFUL``
+ - ask started successfully
+ * - ``RTEMS_INVALID_ADDRESS``
+ - invalid task entry point
+ * - ``RTEMS_INVALID_ID``
+ - invalid task id
+ * - ``RTEMS_INCORRECT_STATE``
+ - task not in the dormant state
+ * - ``RTEMS_ILLEGAL_ON_REMOTE_OBJECT``
+ - cannot start remote task
+
+DESCRIPTION:
+ This directive readies the task, specified by ``id``, for execution based
+ on the priority and execution mode specified when the task was created.
+ The starting address of the task is given in ``entry_point``. The task's
+ starting argument is contained in argument. This argument can be a single
+ value or used as an index into an array of parameter blocks. The type of
+ this numeric argument is an unsigned integer type with the property that
+ any valid pointer to void can be converted to this type and then converted
+ back to a pointer to void. The result will compare equal to the original
+ pointer.
+
+NOTES:
+ The calling task will be preempted if its preemption mode is enabled and
+ the task being started has a higher priority.
+
+ Any actions performed on a dormant task such as suspension or change of
+ priority are nullified when the task is initiated via the
+ ``rtems_task_start`` directive.
+
+.. raw:: latex
+
+ \clearpage
.. _rtems_task_restart:
TASK_RESTART - Restart a task
-----------------------------
.. index:: restarting a task
-
-**CALLING SEQUENCE:**
-
.. index:: rtems_task_restart
-.. code-block:: c
-
- rtems_status_code rtems_task_restart(
- rtems_id id,
- rtems_task_argument argument
- );
-
-**DIRECTIVE STATUS CODES:**
-
-.. list-table::
- :class: rtems-table
-
- * - ``RTEMS_SUCCESSFUL``
- - task restarted successfully
- * - ``RTEMS_INVALID_ID``
- - task id invalid
- * - ``RTEMS_INCORRECT_STATE``
- - task never started
- * - ``RTEMS_ILLEGAL_ON_REMOTE_OBJECT``
- - cannot restart remote task
-
-**DESCRIPTION:**
-
-This directive resets the task specified by id to begin execution at its
-original starting address. The task's priority and execution mode are set to
-the original creation values. If the task is currently blocked, RTEMS
-automatically makes the task ready. A task can be restarted from any state,
-except the dormant state.
-
-The task's starting argument is contained in argument. This argument can be a
-single value or an index into an array of parameter blocks. The type of this
-numeric argument is an unsigned integer type with the property that any valid
-pointer to void can be converted to this type and then converted back to a
-pointer to void. The result will compare equal to the original pointer. This
-new argument may be used to distinguish between the initial
-``rtems_task_start`` of the task and any ensuing calls to
-``rtems_task_restart`` of the task. This can be beneficial in deleting a task.
-Instead of deleting a task using the ``rtems_task_delete`` directive, a task
-can delete another task by restarting that task, and allowing that task to
-release resources back to RTEMS and then delete itself.
-
-**NOTES:**
-
-If id is ``RTEMS_SELF``, the calling task will be restarted and will not return
-from this directive.
-
-The calling task will be preempted if its preemption mode is enabled and the
-task being restarted has a higher priority.
-
-The task must reside on the local node, even if the task was created with the
-``RTEMS_GLOBAL`` option.
+CALLING SEQUENCE:
+ .. code-block:: c
+
+ rtems_status_code rtems_task_restart(
+ rtems_id id,
+ rtems_task_argument argument
+ );
+
+DIRECTIVE STATUS CODES:
+ .. list-table::
+ :class: rtems-table
+
+ * - ``RTEMS_SUCCESSFUL``
+ - task restarted successfully
+ * - ``RTEMS_INVALID_ID``
+ - task id invalid
+ * - ``RTEMS_INCORRECT_STATE``
+ - task never started
+ * - ``RTEMS_ILLEGAL_ON_REMOTE_OBJECT``
+ - cannot restart remote task
+
+DESCRIPTION:
+ This directive resets the task specified by id to begin execution at its
+ original starting address. The task's priority and execution mode are set
+ to the original creation values. If the task is currently blocked, RTEMS
+ automatically makes the task ready. A task can be restarted from any
+ state, except the dormant state.
+
+ The task's starting argument is contained in argument. This argument can
+ be a single value or an index into an array of parameter blocks. The type
+ of this numeric argument is an unsigned integer type with the property that
+ any valid pointer to void can be converted to this type and then converted
+ back to a pointer to void. The result will compare equal to the original
+ pointer. This new argument may be used to distinguish between the initial
+ ``rtems_task_start`` of the task and any ensuing calls to
+ ``rtems_task_restart`` of the task. This can be beneficial in deleting a
+ task. Instead of deleting a task using the ``rtems_task_delete``
+ directive, a task can delete another task by restarting that task, and
+ allowing that task to release resources back to RTEMS and then delete
+ itself.
+
+NOTES:
+ If id is ``RTEMS_SELF``, the calling task will be restarted and will not
+ return from this directive.
+
+ The calling task will be preempted if its preemption mode is enabled and
+ the task being restarted has a higher priority.
+
+ The task must reside on the local node, even if the task was created with
+ the ``RTEMS_GLOBAL`` option.
+
+.. raw:: latex
+
+ \clearpage
.. _rtems_task_delete:
TASK_DELETE - Delete a task
---------------------------
.. index:: deleting a task
-
-**CALLING SEQUENCE:**
-
.. index:: rtems_task_delete
-.. code-block:: c
+CALLING SEQUENCE:
+ .. code-block:: c
- rtems_status_code rtems_task_delete(
- rtems_id id
- );
+ rtems_status_code rtems_task_delete(
+ rtems_id id
+ );
-**DIRECTIVE STATUS CODES:**
+DIRECTIVE STATUS CODES:
+ .. list-table::
+ :class: rtems-table
-.. list-table::
- :class: rtems-table
+ * - ``RTEMS_SUCCESSFUL``
+ - task deleted successfully
+ * - ``RTEMS_INVALID_ID``
+ - task id invalid
+ * - ``RTEMS_ILLEGAL_ON_REMOTE_OBJECT``
+ - cannot restart remote task
- * - ``RTEMS_SUCCESSFUL``
- - task deleted successfully
- * - ``RTEMS_INVALID_ID``
- - task id invalid
- * - ``RTEMS_ILLEGAL_ON_REMOTE_OBJECT``
- - cannot restart remote task
+DESCRIPTION:
+ This directive deletes a task, either the calling task or another task, as
+ specified by id. RTEMS stops the execution of the task and reclaims the
+ stack memory, any allocated delay or timeout timers, the TCB, and, if the
+ task is ``RTEMS_FLOATING_POINT``, its floating point context area. RTEMS
+ does not reclaim the following resources: region segments, partition
+ buffers, semaphores, timers, or rate monotonic periods.
-**DESCRIPTION:**
+NOTES:
+ A task is responsible for releasing its resources back to RTEMS before
+ deletion. To insure proper deallocation of resources, a task should not be
+ deleted unless it is unable to execute or does not hold any RTEMS
+ resources. If a task holds RTEMS resources, the task should be allowed to
+ deallocate its resources before deletion. A task can be directed to
+ release its resources and delete itself by restarting it with a special
+ argument or by sending it a message, an event, or a signal.
-This directive deletes a task, either the calling task or another task, as
-specified by id. RTEMS stops the execution of the task and reclaims the stack
-memory, any allocated delay or timeout timers, the TCB, and, if the task is
-``RTEMS_FLOATING_POINT``, its floating point context area. RTEMS does not
-reclaim the following resources: region segments, partition buffers,
-semaphores, timers, or rate monotonic periods.
+ Deletion of the current task (``RTEMS_SELF``) will force RTEMS to select
+ another task to execute.
-**NOTES:**
+ When a global task is deleted, the task id must be transmitted to every
+ node in the system for deletion from the local copy of the global object
+ table.
-A task is responsible for releasing its resources back to RTEMS before
-deletion. To insure proper deallocation of resources, a task should not be
-deleted unless it is unable to execute or does not hold any RTEMS resources.
-If a task holds RTEMS resources, the task should be allowed to deallocate its
-resources before deletion. A task can be directed to release its resources and
-delete itself by restarting it with a special argument or by sending it a
-message, an event, or a signal.
+ The task must reside on the local node, even if the task was created with
+ the ``RTEMS_GLOBAL`` option.
-Deletion of the current task (``RTEMS_SELF``) will force RTEMS to select
-another task to execute.
+.. raw:: latex
-When a global task is deleted, the task id must be transmitted to every node in
-the system for deletion from the local copy of the global object table.
-
-The task must reside on the local node, even if the task was created with the
-``RTEMS_GLOBAL`` option.
+ \clearpage
.. _rtems_task_suspend:
TASK_SUSPEND - Suspend a task
-----------------------------
.. index:: suspending a task
-
-**CALLING SEQUENCE:**
-
.. index:: rtems_task_suspend
-.. code-block:: c
+CALLING SEQUENCE:
+ .. code-block:: c
- rtems_status_code rtems_task_suspend(
- rtems_id id
- );
+ rtems_status_code rtems_task_suspend(
+ rtems_id id
+ );
-**DIRECTIVE STATUS CODES:**
+DIRECTIVE STATUS CODES:
+ .. list-table::
+ :class: rtems-table
-.. list-table::
- :class: rtems-table
+ * - ``RTEMS_SUCCESSFUL``
+ - task suspended successfully
+ * - ``RTEMS_INVALID_ID``
+ - task id invalid
+ * - ``RTEMS_ALREADY_SUSPENDED``
+ - task already suspended
- * - ``RTEMS_SUCCESSFUL``
- - task suspended successfully
- * - ``RTEMS_INVALID_ID``
- - task id invalid
- * - ``RTEMS_ALREADY_SUSPENDED``
- - task already suspended
+DESCRIPTION:
+ This directive suspends the task specified by id from further execution by
+ placing it in the suspended state. This state is additive to any other
+ blocked state that the task may already be in. The task will not execute
+ again until another task issues the ``rtems_task_resume`` directive for
+ this task and any blocked state has been removed.
-**DESCRIPTION:**
+NOTES:
+ The requesting task can suspend itself by specifying ``RTEMS_SELF`` as id.
+ In this case, the task will be suspended and a successful return code will
+ be returned when the task is resumed.
-This directive suspends the task specified by id from further execution by
-placing it in the suspended state. This state is additive to any other blocked
-state that the task may already be in. The task will not execute again until
-another task issues the ``rtems_task_resume`` directive for this task and any
-blocked state has been removed.
+ Suspending a global task which does not reside on the local node will
+ generate a request to the remote node to suspend the specified task.
-**NOTES:**
+ If the task specified by id is already suspended, then the
+ ``RTEMS_ALREADY_SUSPENDED`` status code is returned.
-The requesting task can suspend itself by specifying ``RTEMS_SELF`` as id. In
-this case, the task will be suspended and a successful return code will be
-returned when the task is resumed.
+.. raw:: latex
-Suspending a global task which does not reside on the local node will generate
-a request to the remote node to suspend the specified task.
-
-If the task specified by id is already suspended, then the
-``RTEMS_ALREADY_SUSPENDED`` status code is returned.
+ \clearpage
.. _rtems_task_resume:
TASK_RESUME - Resume a task
---------------------------
.. index:: resuming a task
-
-**CALLING SEQUENCE:**
-
.. index:: rtems_task_resume
-.. code-block:: c
-
- rtems_status_code rtems_task_resume(
- rtems_id id
- );
+CALLING SEQUENCE:
+ .. code-block:: c
-**DIRECTIVE STATUS CODES:**
+ rtems_status_code rtems_task_resume(
+ rtems_id id
+ );
-.. list-table::
- :class: rtems-table
+DIRECTIVE STATUS CODES:
+ .. list-table::
+ :class: rtems-table
- * - ``RTEMS_SUCCESSFUL``
- - task resumed successfully
- * - ``RTEMS_INVALID_ID``
- - task id invalid
- * - ``RTEMS_INCORRECT_STATE``
- - task not suspended
+ * - ``RTEMS_SUCCESSFUL``
+ - task resumed successfully
+ * - ``RTEMS_INVALID_ID``
+ - task id invalid
+ * - ``RTEMS_INCORRECT_STATE``
+ - task not suspended
-**DESCRIPTION:**
+DESCRIPTION:
+ This directive removes the task specified by id from the suspended state.
+ If the task is in the ready state after the suspension is removed, then it
+ will be scheduled to run. If the task is still in a blocked state after
+ the suspension is removed, then it will remain in that blocked state.
-This directive removes the task specified by id from the suspended state. If
-the task is in the ready state after the suspension is removed, then it will be
-scheduled to run. If the task is still in a blocked state after the suspension
-is removed, then it will remain in that blocked state.
+NOTES:
+ The running task may be preempted if its preemption mode is enabled and the
+ local task being resumed has a higher priority.
-**NOTES:**
+ Resuming a global task which does not reside on the local node will
+ generate a request to the remote node to resume the specified task.
-The running task may be preempted if its preemption mode is enabled and the
-local task being resumed has a higher priority.
+ If the task specified by id is not suspended, then the
+ ``RTEMS_INCORRECT_STATE`` status code is returned.
-Resuming a global task which does not reside on the local node will generate a
-request to the remote node to resume the specified task.
+.. raw:: latex
-If the task specified by id is not suspended, then the
-``RTEMS_INCORRECT_STATE`` status code is returned.
+ \clearpage
.. _rtems_task_is_suspended:
TASK_IS_SUSPENDED - Determine if a task is Suspended
----------------------------------------------------
.. index:: is task suspended
-
-**CALLING SEQUENCE:**
-
.. index:: rtems_task_is_suspended
-.. code-block:: c
+CALLING SEQUENCE:
+ .. code-block:: c
- rtems_status_code rtems_task_is_suspended(
- rtems_id id
- );
+ rtems_status_code rtems_task_is_suspended(
+ rtems_id id
+ );
-**DIRECTIVE STATUS CODES:**
-
-.. list-table::
- :class: rtems-table
+DIRECTIVE STATUS CODES:
+ .. list-table::
+ :class: rtems-table
- * - ``RTEMS_SUCCESSFUL``
- - task is NOT suspended
- * - ``RTEMS_ALREADY_SUSPENDED``
- - task is currently suspended
- * - ``RTEMS_INVALID_ID``
- - task id invalid
- * - ``RTEMS_ILLEGAL_ON_REMOTE_OBJECT``
- - not supported on remote tasks
+ * - ``RTEMS_SUCCESSFUL``
+ - task is NOT suspended
+ * - ``RTEMS_ALREADY_SUSPENDED``
+ - task is currently suspended
+ * - ``RTEMS_INVALID_ID``
+ - task id invalid
+ * - ``RTEMS_ILLEGAL_ON_REMOTE_OBJECT``
+ - not supported on remote tasks
-**DESCRIPTION:**
+DESCRIPTION:
+ This directive returns a status code indicating whether or not the
+ specified task is currently suspended.
-This directive returns a status code indicating whether or not the specified
-task is currently suspended.
+NOTES:
+ This operation is not currently supported on remote tasks.
-**NOTES:**
+.. raw:: latex
-This operation is not currently supported on remote tasks.
+ \clearpage
.. _rtems_task_set_priority:
@@ -1125,58 +1127,59 @@ TASK_SET_PRIORITY - Set task priority
.. index:: get task priority
.. index:: obtain task priority
-**CALLING SEQUENCE:**
-
-.. code-block:: c
-
- rtems_status_code rtems_task_set_priority(
- rtems_id id,
- rtems_task_priority new_priority,
- rtems_task_priority *old_priority
- );
-
-**DIRECTIVE STATUS CODES:**
-
-.. list-table::
- :class: rtems-table
-
- * - ``RTEMS_SUCCESSFUL``
- - task priority set successfully
- * - ``RTEMS_INVALID_ID``
- - invalid task id
- * - ``RTEMS_INVALID_ADDRESS``
- - invalid return argument pointer
- * - ``RTEMS_INVALID_PRIORITY``
- - invalid task priority
-
-**DESCRIPTION:**
-
-This directive manipulates the priority of the task specified by id. An id of
-``RTEMS_SELF`` is used to indicate the calling task. When new_priority is not
-equal to ``RTEMS_CURRENT_PRIORITY``, the specified task's previous priority is
-returned in old_priority. When new_priority is ``RTEMS_CURRENT_PRIORITY``, the
-specified task's current priority is returned in old_priority. Valid
-priorities range from a high of 1 to a low of 255.
-
-**NOTES:**
-
-The calling task may be preempted if its preemption mode is enabled and it
-lowers its own priority or raises another task's priority.
-
-In case the new priority equals the current priority of the task, then nothing
-happens.
-
-Setting the priority of a global task which does not reside on the local node
-will generate a request to the remote node to change the priority of the
-specified task.
-
-If the task specified by id is currently holding any binary semaphores which
-use the priority inheritance algorithm, then the task's priority cannot be
-lowered immediately. If the task's priority were lowered immediately, then
-priority inversion results. The requested lowering of the task's priority will
-occur when the task has released all priority inheritance binary semaphores.
-The task's priority can be increased regardless of the task's use of priority
-inheritance binary semaphores.
+CALLING SEQUENCE:
+ .. code-block:: c
+
+ rtems_status_code rtems_task_set_priority(
+ rtems_id id,
+ rtems_task_priority new_priority,
+ rtems_task_priority *old_priority
+ );
+
+DIRECTIVE STATUS CODES:
+ .. list-table::
+ :class: rtems-table
+
+ * - ``RTEMS_SUCCESSFUL``
+ - task priority set successfully
+ * - ``RTEMS_INVALID_ID``
+ - invalid task id
+ * - ``RTEMS_INVALID_ADDRESS``
+ - invalid return argument pointer
+ * - ``RTEMS_INVALID_PRIORITY``
+ - invalid task priority
+
+DESCRIPTION:
+ This directive manipulates the priority of the task specified by id. An id
+ of ``RTEMS_SELF`` is used to indicate the calling task. When new_priority
+ is not equal to ``RTEMS_CURRENT_PRIORITY``, the specified task's previous
+ priority is returned in old_priority. When new_priority is
+ ``RTEMS_CURRENT_PRIORITY``, the specified task's current priority is
+ returned in old_priority. Valid priorities range from a high of 1 to a low
+ of 255.
+
+NOTES:
+ The calling task may be preempted if its preemption mode is enabled and it
+ lowers its own priority or raises another task's priority.
+
+ In case the new priority equals the current priority of the task, then
+ nothing happens.
+
+ Setting the priority of a global task which does not reside on the local
+ node will generate a request to the remote node to change the priority of
+ the specified task.
+
+ If the task specified by id is currently holding any binary semaphores
+ which use the priority inheritance algorithm, then the task's priority
+ cannot be lowered immediately. If the task's priority were lowered
+ immediately, then priority inversion results. The requested lowering of
+ the task's priority will occur when the task has released all priority
+ inheritance binary semaphores. The task's priority can be increased
+ regardless of the task's use of priority inheritance binary semaphores.
+
+.. raw:: latex
+
+ \clearpage
.. _rtems_task_mode:
@@ -1188,172 +1191,171 @@ TASK_MODE - Change the current task mode
.. index:: set task preemption mode
.. index:: get task preemption mode
.. index:: obtain task mode
-
-**CALLING SEQUENCE:**
-
.. index:: rtems_task_mode
-.. code-block:: c
-
- rtems_status_code rtems_task_mode(
- rtems_mode mode_set,
- rtems_mode mask,
- rtems_mode *previous_mode_set
- );
-
-**DIRECTIVE STATUS CODES:**
-
-.. list-table::
- :class: rtems-table
-
- * - ``RTEMS_SUCCESSFUL``
- - task mode set successfully
- * - ``RTEMS_INVALID_ADDRESS``
- - ``previous_mode_set`` is NULL
-
-**DESCRIPTION:**
-
-This directive manipulates the execution mode of the calling task. A task's
-execution mode enables and disables preemption, timeslicing, asynchronous
-signal processing, as well as specifying the current interrupt level. To
-modify an execution mode, the mode class(es) to be changed must be specified in
-the mask parameter and the desired mode(s) must be specified in the mode
-parameter.
-
-**NOTES:**
-
-The calling task will be preempted if it enables preemption and a higher
-priority task is ready to run.
-
-Enabling timeslicing has no effect if preemption is disabled. For a task to be
-timesliced, that task must have both preemption and timeslicing enabled.
-
-A task can obtain its current execution mode, without modifying it, by calling
-this directive with a mask value of ``RTEMS_CURRENT_MODE``.
-
-To temporarily disable the processing of a valid ASR, a task should call this
-directive with the ``RTEMS_NO_ASR`` indicator specified in mode.
-
-The set of task mode constants and each mode's corresponding mask constant is
-provided in the following table:
-
-.. list-table::
- :class: rtems-table
-
- * - ``RTEMS_PREEMPT``
- - is masked by ``RTEMS_PREEMPT_MASK`` and enables preemption
- * - ``RTEMS_NO_PREEMPT``
- - is masked by ``RTEMS_PREEMPT_MASK`` and disables preemption
- * - ``RTEMS_NO_TIMESLICE``
- - is masked by ``RTEMS_TIMESLICE_MASK`` and disables timeslicing
- * - ``RTEMS_TIMESLICE``
- - is masked by ``RTEMS_TIMESLICE_MASK`` and enables timeslicing
- * - ``RTEMS_ASR``
- - is masked by ``RTEMS_ASR_MASK`` and enables ASR processing
- * - ``RTEMS_NO_ASR``
- - is masked by ``RTEMS_ASR_MASK`` and disables ASR processing
- * - ``RTEMS_INTERRUPT_LEVEL(0)``
- - is masked by ``RTEMS_INTERRUPT_MASK`` and enables all interrupts
- * - ``RTEMS_INTERRUPT_LEVEL(n)``
- - is masked by ``RTEMS_INTERRUPT_MASK`` and sets interrupts level n
+CALLING SEQUENCE:
+ .. code-block:: c
+
+ rtems_status_code rtems_task_mode(
+ rtems_mode mode_set,
+ rtems_mode mask,
+ rtems_mode *previous_mode_set
+ );
+
+DIRECTIVE STATUS CODES:
+ .. list-table::
+ :class: rtems-table
+
+ * - ``RTEMS_SUCCESSFUL``
+ - task mode set successfully
+ * - ``RTEMS_INVALID_ADDRESS``
+ - ``previous_mode_set`` is NULL
+
+DESCRIPTION:
+ This directive manipulates the execution mode of the calling task. A
+ task's execution mode enables and disables preemption, timeslicing,
+ asynchronous signal processing, as well as specifying the current interrupt
+ level. To modify an execution mode, the mode class(es) to be changed must
+ be specified in the mask parameter and the desired mode(s) must be
+ specified in the mode parameter.
+
+NOTES:
+ The calling task will be preempted if it enables preemption and a higher
+ priority task is ready to run.
+
+ Enabling timeslicing has no effect if preemption is disabled. For a task
+ to be timesliced, that task must have both preemption and timeslicing
+ enabled.
+
+ A task can obtain its current execution mode, without modifying it, by
+ calling this directive with a mask value of ``RTEMS_CURRENT_MODE``.
+
+ To temporarily disable the processing of a valid ASR, a task should call
+ this directive with the ``RTEMS_NO_ASR`` indicator specified in mode.
+
+ The set of task mode constants and each mode's corresponding mask constant
+ is provided in the following table:
+
+ .. list-table::
+ :class: rtems-table
+
+ * - ``RTEMS_PREEMPT``
+ - is masked by ``RTEMS_PREEMPT_MASK`` and enables preemption
+ * - ``RTEMS_NO_PREEMPT``
+ - is masked by ``RTEMS_PREEMPT_MASK`` and disables preemption
+ * - ``RTEMS_NO_TIMESLICE``
+ - is masked by ``RTEMS_TIMESLICE_MASK`` and disables timeslicing
+ * - ``RTEMS_TIMESLICE``
+ - is masked by ``RTEMS_TIMESLICE_MASK`` and enables timeslicing
+ * - ``RTEMS_ASR``
+ - is masked by ``RTEMS_ASR_MASK`` and enables ASR processing
+ * - ``RTEMS_NO_ASR``
+ - is masked by ``RTEMS_ASR_MASK`` and disables ASR processing
+ * - ``RTEMS_INTERRUPT_LEVEL(0)``
+ - is masked by ``RTEMS_INTERRUPT_MASK`` and enables all interrupts
+ * - ``RTEMS_INTERRUPT_LEVEL(n)``
+ - is masked by ``RTEMS_INTERRUPT_MASK`` and sets interrupts level n
+
+.. raw:: latex
+
+ \clearpage
.. _rtems_task_get_note:
TASK_GET_NOTE - Get task notepad entry
--------------------------------------
.. index:: get task notepad entry
-
-**CALLING SEQUENCE:**
-
.. index:: rtems_task_get_note
-.. code-block:: c
+CALLING SEQUENCE:
+ .. code-block:: c
- rtems_status_code rtems_task_get_note(
- rtems_id id,
- uint32_t notepad,
- uint32_t *note
- );
+ rtems_status_code rtems_task_get_note(
+ rtems_id id,
+ uint32_t notepad,
+ uint32_t *note
+ );
-**DIRECTIVE STATUS CODES:**
-
-.. list-table::
- :class: rtems-table
+DIRECTIVE STATUS CODES:
+ .. list-table::
+ :class: rtems-table
- * - ``RTEMS_SUCCESSFUL``
- - note value obtained successfully
- * - ``RTEMS_INVALID_ADDRESS``
- - ``note`` parameter is NULL
- * - ``RTEMS_INVALID_ID``
- - invalid task id
- * - ``RTEMS_INVALID_NUMBER``
- - invalid notepad location
+ * - ``RTEMS_SUCCESSFUL``
+ - note value obtained successfully
+ * - ``RTEMS_INVALID_ADDRESS``
+ - ``note`` parameter is NULL
+ * - ``RTEMS_INVALID_ID``
+ - invalid task id
+ * - ``RTEMS_INVALID_NUMBER``
+ - invalid notepad location
-**DESCRIPTION:**
+DESCRIPTION:
+ This directive returns the note contained in the notepad location of the
+ task specified by id.
-This directive returns the note contained in the notepad location of
-the task specified by id.
+NOTES:
+ This directive will not cause the running task to be preempted.
-**NOTES:**
+ If id is set to ``RTEMS_SELF``, the calling task accesses its own notepad.
-This directive will not cause the running task to be preempted.
+ The sixteen notepad locations can be accessed using the constants
+ ``RTEMS_NOTEPAD_0`` through ``RTEMS_NOTEPAD_15``.
-If id is set to ``RTEMS_SELF``, the calling task accesses its own notepad.
+ Getting a note of a global task which does not reside on the local node
+ will generate a request to the remote node to obtain the notepad entry of
+ the specified task.
-The sixteen notepad locations can be accessed using the constants
-``RTEMS_NOTEPAD_0`` through ``RTEMS_NOTEPAD_15``.
+.. raw:: latex
-Getting a note of a global task which does not reside on the
-local node will generate a request to the remote node to obtain
-the notepad entry of the specified task.
+ \clearpage
.. _rtems_task_set_note:
TASK_SET_NOTE - Set task notepad entry
--------------------------------------
.. index:: set task notepad entry
-
-**CALLING SEQUENCE:**
-
.. index:: rtems_task_set_note
-.. code-block:: c
-
- rtems_status_code rtems_task_set_note(
- rtems_id id,
- uint32_t notepad,
- uint32_t note
- );
+CALLING SEQUENCE:
+ .. code-block:: c
-**DIRECTIVE STATUS CODES:**
+ rtems_status_code rtems_task_set_note(
+ rtems_id id,
+ uint32_t notepad,
+ uint32_t note
+ );
-.. list-table::
- :class: rtems-table
+DIRECTIVE STATUS CODES:
+ .. list-table::
+ :class: rtems-table
- * - ``RTEMS_SUCCESSFUL``
- - note set successfully
- * - ``RTEMS_INVALID_ID``
- - invalid task id
- * - ``RTEMS_INVALID_NUMBER``
- - invalid notepad location
+ * - ``RTEMS_SUCCESSFUL``
+ - note set successfully
+ * - ``RTEMS_INVALID_ID``
+ - invalid task id
+ * - ``RTEMS_INVALID_NUMBER``
+ - invalid notepad location
-**DESCRIPTION:**
+DESCRIPTION:
+ This directive sets the notepad entry for the task specified by id to the
+ value note.
-This directive sets the notepad entry for the task specified by
-id to the value note.
+NOTES:
+ If ``id`` is set to ``RTEMS_SELF``, the calling task accesses its own
+ notepad.
-**NOTES:**
+ This directive will not cause the running task to be preempted.
-If ``id`` is set to ``RTEMS_SELF``, the calling task accesses its own notepad.
+ The sixteen notepad locations can be accessed using the constants
+ ``RTEMS_NOTEPAD_0`` through ``RTEMS_NOTEPAD_15``.
-This directive will not cause the running task to be preempted.
+ Setting a note of a global task which does not reside on the local node
+ will generate a request to the remote node to set the notepad entry of the
+ specified task.
-The sixteen notepad locations can be accessed using the constants
-``RTEMS_NOTEPAD_0`` through ``RTEMS_NOTEPAD_15``.
+.. raw:: latex
-Setting a note of a global task which does not reside on the
-local node will generate a request to the remote node to set
-the notepad entry of the specified task.
+ \clearpage
.. _rtems_task_wake_after:
@@ -1361,43 +1363,42 @@ TASK_WAKE_AFTER - Wake up after interval
----------------------------------------
.. index:: delay a task for an interval
.. index:: wake up after an interval
-
-**CALLING SEQUENCE:**
-
.. index:: rtems_task_wake_after
-.. code-block:: c
+CALLING SEQUENCE:
+ .. code-block:: c
- rtems_status_code rtems_task_wake_after(
- rtems_interval ticks
- );
+ rtems_status_code rtems_task_wake_after(
+ rtems_interval ticks
+ );
-**DIRECTIVE STATUS CODES:**
+DIRECTIVE STATUS CODES:
+ .. list-table::
+ :class: rtems-table
-.. list-table::
- :class: rtems-table
-
- * - ``RTEMS_SUCCESSFUL``
- - always successful
+ * - ``RTEMS_SUCCESSFUL``
+ - always successful
-**DESCRIPTION:**
+DESCRIPTION:
+ This directive blocks the calling task for the specified number of system
+ clock ticks. When the requested interval has elapsed, the task is made
+ ready. The clock tick directives automatically updates the delay period.
-This directive blocks the calling task for the specified number of system clock
-ticks. When the requested interval has elapsed, the task is made ready. The
-clock tick directives automatically updates the delay period.
+NOTES:
+ Setting the system date and time with the ``rtems_clock_set`` directive has
+ no effect on a ``rtems_task_wake_after`` blocked task.
-**NOTES:**
+ A task may give up the processor and remain in the ready state by
+ specifying a value of ``RTEMS_YIELD_PROCESSOR`` in ticks.
-Setting the system date and time with the ``rtems_clock_set`` directive has no
-effect on a ``rtems_task_wake_after`` blocked task.
+ The maximum timer interval that can be specified is the maximum value which
+ can be represented by the uint32_t type.
-A task may give up the processor and remain in the ready state by specifying a
-value of ``RTEMS_YIELD_PROCESSOR`` in ticks.
+ A clock tick is required to support the functionality of this directive.
-The maximum timer interval that can be specified is the maximum value which can
-be represented by the uint32_t type.
+.. raw:: latex
-A clock tick is required to support the functionality of this directive.
+ \clearpage
.. _rtems_task_wake_when:
@@ -1405,80 +1406,78 @@ TASK_WAKE_WHEN - Wake up when specified
---------------------------------------
.. index:: delay a task until a wall time
.. index:: wake up at a wall time
-
-**CALLING SEQUENCE:**
-
.. index:: rtems_task_wake_when
-.. code-block:: c
-
- rtems_status_code rtems_task_wake_when(
- rtems_time_of_day *time_buffer
- );
+CALLING SEQUENCE:
+ .. code-block:: c
-**DIRECTIVE STATUS CODES:**
+ rtems_status_code rtems_task_wake_when(
+ rtems_time_of_day *time_buffer
+ );
-.. list-table::
- :class: rtems-table
+DIRECTIVE STATUS CODES:
+ .. list-table::
+ :class: rtems-table
- * - ``RTEMS_SUCCESSFUL``
- - awakened at date/time successfully
- * - ``RTEMS_INVALID_ADDRESS``
- - ``time_buffer`` is NULL
- * - ``RTEMS_INVALID_TIME_OF_DAY``
- - invalid time buffer
- * - ``RTEMS_NOT_DEFINED``
- - system date and time is not set
+ * - ``RTEMS_SUCCESSFUL``
+ - awakened at date/time successfully
+ * - ``RTEMS_INVALID_ADDRESS``
+ - ``time_buffer`` is NULL
+ * - ``RTEMS_INVALID_TIME_OF_DAY``
+ - invalid time buffer
+ * - ``RTEMS_NOT_DEFINED``
+ - system date and time is not set
-**DESCRIPTION:**
+DESCRIPTION:
+ This directive blocks a task until the date and time specified in
+ time_buffer. At the requested date and time, the calling task will be
+ unblocked and made ready to execute.
-This directive blocks a task until the date and time specified in time_buffer.
-At the requested date and time, the calling task will be unblocked and made
-ready to execute.
+NOTES:
+ The ticks portion of time_buffer structure is ignored. The timing
+ granularity of this directive is a second.
-**NOTES:**
+ A clock tick is required to support the functionality of this directive.
-The ticks portion of time_buffer structure is ignored. The timing granularity
-of this directive is a second.
+.. raw:: latex
-A clock tick is required to support the functionality of this directive.
+ \clearpage
.. _rtems_iterate_over_all_threads:
ITERATE_OVER_ALL_THREADS - Iterate Over Tasks
---------------------------------------------
.. index:: iterate over all threads
-
-**CALLING SEQUENCE:**
-
.. index:: rtems_iterate_over_all_threads
-.. code-block:: c
-
- typedef void (*rtems_per_thread_routine)(Thread_Control *the_thread);
- void rtems_iterate_over_all_threads(
- rtems_per_thread_routine routine
- );
+CALLING SEQUENCE:
+ .. code-block:: c
-**DIRECTIVE STATUS CODES:**
+ typedef void (*rtems_per_thread_routine)(Thread_Control *the_thread);
+ void rtems_iterate_over_all_threads(
+ rtems_per_thread_routine routine
+ );
-NONE
+DIRECTIVE STATUS CODES:
+ NONE
-**DESCRIPTION:**
+DESCRIPTION:
+ This directive iterates over all of the existant threads in the system and
+ invokes ``routine`` on each of them. The user should be careful in
+ accessing the contents of ``the_thread``.
-This directive iterates over all of the existant threads in the system and
-invokes ``routine`` on each of them. The user should be careful in accessing
-the contents of ``the_thread``.
+ This routine is intended for use in diagnostic utilities and is not
+ intented for routine use in an operational system.
-This routine is intended for use in diagnostic utilities and is not intented
-for routine use in an operational system.
+NOTES:
+ There is NO protection while this routine is called. Thus it is possible
+ that ``the_thread`` could be deleted while this is operating. By not
+ having protection, the user is free to invoke support routines from the C
+ Library which require semaphores for data structures.
-**NOTES:**
+.. raw:: latex
-There is NO protection while this routine is called. Thus it is possible that
-``the_thread`` could be deleted while this is operating. By not having
-protection, the user is free to invoke support routines from the C Library
-which require semaphores for data structures.
+ \clearpage
.. _rtems_task_variable_add:
@@ -1487,61 +1486,61 @@ TASK_VARIABLE_ADD - Associate per task variable
.. index:: per-task variable
.. index:: task private variable
.. index:: task private data
+.. index:: rtems_task_variable_add
.. warning::
This directive is deprecated and task variables will be removed.
-**CALLING SEQUENCE:**
-
-.. index:: rtems_task_variable_add
-
-.. code-block:: c
-
- rtems_status_code rtems_task_variable_add(
- rtems_id tid,
- void **task_variable,
- void (*dtor)(void *)
- );
-
-**DIRECTIVE STATUS CODES:**
-
-.. list-table::
- :class: rtems-table
-
- * - ``RTEMS_SUCCESSFUL``
- - per task variable added successfully
- * - ``RTEMS_INVALID_ADDRESS``
- - ``task_variable`` is NULL
- * - ``RTEMS_INVALID_ID``
- - invalid task id
- * - ``RTEMS_NO_MEMORY``
- - invalid task id
- * - ``RTEMS_ILLEGAL_ON_REMOTE_OBJECT``
- - not supported on remote tasks
-
-**DESCRIPTION:**
-
-This directive adds the memory location specified by the ptr argument to the
-context of the given task. The variable will then be private to the task. The
-task can access and modify the variable, but the modifications will not appear
-to other tasks, and other tasks' modifications to that variable will not affect
-the value seen by the task. This is accomplished by saving and restoring the
-variable's value each time a task switch occurs to or from the calling task.
-If the dtor argument is non-NULL it specifies the address of a 'destructor'
-function which will be called when the task is deleted. The argument passed to
-the destructor function is the task's value of the variable.
-
-**NOTES:**
-
-Task variables increase the context switch time to and from the tasks that own
-them so it is desirable to minimize the number of task variables. One
-efficient method is to have a single task variable that is a pointer to a
-dynamically allocated structure containing the task's private 'global' data.
-In this case the destructor function could be 'free'.
-
-Per-task variables are disabled in SMP configurations and this service is not
-available.
+CALLING SEQUENCE:
+ .. code-block:: c
+
+ rtems_status_code rtems_task_variable_add(
+ rtems_id tid,
+ void **task_variable,
+ void (*dtor)(void *)
+ );
+
+DIRECTIVE STATUS CODES:
+ .. list-table::
+ :class: rtems-table
+
+ * - ``RTEMS_SUCCESSFUL``
+ - per task variable added successfully
+ * - ``RTEMS_INVALID_ADDRESS``
+ - ``task_variable`` is NULL
+ * - ``RTEMS_INVALID_ID``
+ - invalid task id
+ * - ``RTEMS_NO_MEMORY``
+ - invalid task id
+ * - ``RTEMS_ILLEGAL_ON_REMOTE_OBJECT``
+ - not supported on remote tasks
+
+DESCRIPTION:
+ This directive adds the memory location specified by the ptr argument to
+ the context of the given task. The variable will then be private to the
+ task. The task can access and modify the variable, but the modifications
+ will not appear to other tasks, and other tasks' modifications to that
+ variable will not affect the value seen by the task. This is accomplished
+ by saving and restoring the variable's value each time a task switch occurs
+ to or from the calling task. If the dtor argument is non-NULL it specifies
+ the address of a 'destructor' function which will be called when the task
+ is deleted. The argument passed to the destructor function is the task's
+ value of the variable.
+
+NOTES:
+ Task variables increase the context switch time to and from the tasks that
+ own them so it is desirable to minimize the number of task variables. One
+ efficient method is to have a single task variable that is a pointer to a
+ dynamically allocated structure containing the task's private 'global'
+ data. In this case the destructor function could be 'free'.
+
+ Per-task variables are disabled in SMP configurations and this service is
+ not available.
+
+.. raw:: latex
+
+ \clearpage
.. _rtems_task_variable_get:
@@ -1549,57 +1548,56 @@ TASK_VARIABLE_GET - Obtain value of a per task variable
-------------------------------------------------------
.. index:: get per-task variable
.. index:: obtain per-task variable
+.. index:: rtems_task_variable_get
.. warning::
This directive is deprecated and task variables will be removed.
-**CALLING SEQUENCE:**
-
-.. index:: rtems_task_variable_get
-
-.. code-block:: c
-
- rtems_status_code rtems_task_variable_get(
- rtems_id tid,
- void **task_variable,
- void **task_variable_value
- );
-
-**DIRECTIVE STATUS CODES:**
-
-.. list-table::
- :class: rtems-table
-
- * - ``RTEMS_SUCCESSFUL``
- - per task variable obtained successfully
- * - ``RTEMS_INVALID_ADDRESS``
- - ``task_variable`` is NULL
- * - ``RTEMS_INVALID_ADDRESS``
- - ``task_variable_value`` is NULL
- * - ``RTEMS_INVALID_ADDRESS``
- - ``task_variable`` is not found
- * - ``RTEMS_NO_MEMORY``
- - invalid task id
- * - ``RTEMS_ILLEGAL_ON_REMOTE_OBJECT``
- - not supported on remote tasks
-
-**DESCRIPTION:**
-
-This directive looks up the private value of a task variable for a specified
-task and stores that value in the location pointed to by the result argument.
-The specified task is usually not the calling task, which can get its private
-value by directly accessing the variable.
-
-**NOTES:**
-
-If you change memory which ``task_variable_value`` points to, remember to
-declare that memory as volatile, so that the compiler will optimize it
-correctly. In this case both the pointer ``task_variable_value`` and data
-referenced by ``task_variable_value`` should be considered volatile.
-
-Per-task variables are disabled in SMP configurations and this service is not
-available.
+CALLING SEQUENCE:
+ .. code-block:: c
+
+ rtems_status_code rtems_task_variable_get(
+ rtems_id tid,
+ void **task_variable,
+ void **task_variable_value
+ );
+
+DIRECTIVE STATUS CODES:
+ .. list-table::
+ :class: rtems-table
+
+ * - ``RTEMS_SUCCESSFUL``
+ - per task variable obtained successfully
+ * - ``RTEMS_INVALID_ADDRESS``
+ - ``task_variable`` is NULL
+ * - ``RTEMS_INVALID_ADDRESS``
+ - ``task_variable_value`` is NULL
+ * - ``RTEMS_INVALID_ADDRESS``
+ - ``task_variable`` is not found
+ * - ``RTEMS_NO_MEMORY``
+ - invalid task id
+ * - ``RTEMS_ILLEGAL_ON_REMOTE_OBJECT``
+ - not supported on remote tasks
+
+DESCRIPTION:
+ This directive looks up the private value of a task variable for a
+ specified task and stores that value in the location pointed to by the
+ result argument. The specified task is usually not the calling task, which
+ can get its private value by directly accessing the variable.
+
+NOTES:
+ If you change memory which ``task_variable_value`` points to, remember to
+ declare that memory as volatile, so that the compiler will optimize it
+ correctly. In this case both the pointer ``task_variable_value`` and data
+ referenced by ``task_variable_value`` should be considered volatile.
+
+ Per-task variables are disabled in SMP configurations and this service is
+ not available.
+
+.. raw:: latex
+
+ \clearpage
.. _rtems_task_variable_delete:
@@ -1608,43 +1606,38 @@ TASK_VARIABLE_DELETE - Remove per task variable
.. index:: per-task variable
.. index:: task private variable
.. index:: task private data
+.. index:: rtems_task_variable_delete
.. warning::
This directive is deprecated and task variables will be removed.
-**CALLING SEQUENCE:**
-
-.. index:: rtems_task_variable_delete
-
-.. code-block:: c
-
- rtems_status_code rtems_task_variable_delete(
- rtems_id id,
- void **task_variable
- );
-
-**DIRECTIVE STATUS CODES:**
-
-.. list-table::
- :class: rtems-table
-
- * - ``RTEMS_SUCCESSFUL``
- - per task variable deleted successfully
- * - ``RTEMS_INVALID_ID``
- - invalid task id
- * - ``RTEMS_NO_MEMORY``
- - invalid task id
- * - ``RTEMS_INVALID_ADDRESS``
- - ``task_variable`` is NULL
- * - ``RTEMS_ILLEGAL_ON_REMOTE_OBJECT``
- - not supported on remote tasks
-
-**DESCRIPTION:**
-
-This directive removes the given location from a task's context.
-
-**NOTES:**
-
-Per-task variables are disabled in SMP configurations and this service
-is not available.
+CALLING SEQUENCE:
+ .. code-block:: c
+
+ rtems_status_code rtems_task_variable_delete(
+ rtems_id id,
+ void **task_variable
+ );
+
+DIRECTIVE STATUS CODES:
+ .. list-table::
+ :class: rtems-table
+
+ * - ``RTEMS_SUCCESSFUL``
+ - per task variable deleted successfully
+ * - ``RTEMS_INVALID_ID``
+ - invalid task id
+ * - ``RTEMS_NO_MEMORY``
+ - invalid task id
+ * - ``RTEMS_INVALID_ADDRESS``
+ - ``task_variable`` is NULL
+ * - ``RTEMS_ILLEGAL_ON_REMOTE_OBJECT``
+ - not supported on remote tasks
+
+DESCRIPTION:
+ This directive removes the given location from a task's context.
+
+NOTES:
+ Per-task variables are disabled in SMP configurations and this service is
+ not available.