![]() |
RTEMS 6.1
|
The Signal Manager provides the capabilities required for asynchronous communication. More...
Typedefs | |
| typedef void | rtems_asr |
| This type defines the return type of routines which are used to process asynchronous signals. | |
| typedef uint32_t | rtems_signal_set |
| This integer type represents a bit field which can hold exactly 32 individual signals. | |
| typedef rtems_asr(* | rtems_asr_entry) (rtems_signal_set) |
| This type defines the prototype of routines which are used to process asynchronous signals. | |
Functions | |
| rtems_status_code | rtems_signal_catch (rtems_asr_entry asr_handler, rtems_mode mode_set) |
| Establishes an asynchronous signal routine (ASR) for the calling task. | |
| rtems_status_code | rtems_signal_send (rtems_id id, rtems_signal_set signal_set) |
| Sends the signal set to the task. | |
The Signal Manager provides the capabilities required for asynchronous communication.
| typedef void rtems_asr |
This type defines the return type of routines which are used to process asynchronous signals.
| rtems_status_code rtems_signal_catch | ( | rtems_asr_entry | asr_handler, |
| rtems_mode | mode_set | ||
| ) |
Establishes an asynchronous signal routine (ASR) for the calling task.
| asr_handler | is the handler to process an asynchronous signal set. |
| mode_set | is the task mode while an asynchronous signal set is processed by the handler. See rtems_task_mode(). |
This directive establishes an asynchronous signal routine (ASR) for the calling task. The asr_handler parameter specifies the entry point of the ASR. A task may have at most one handler installed at a time. The most recently installed handler is used. When asr_handler is NULL, the ASR for the calling task is invalidated and all pending signals are cleared. Any signals sent to a task with an invalid ASR are discarded. The mode_set parameter specifies the execution mode for the ASR. This execution mode supersedes the task's execution mode while the ASR is executing.
| RTEMS_SUCCESSFUL | The requested operation was successful. |
| RTEMS_NOT_IMPLEMENTED | The RTEMS_NO_PREEMPT was set in mode_set and the system configuration had no implementation for this mode. |
| RTEMS_NOT_IMPLEMENTED | The RTEMS_INTERRUPT_LEVEL() was set to a positive level in mode_set and the system configuration had no implementation for this mode. |
It is strongly recommended to disable ASR processing during ASR processing by setting RTEMS_NO_ASR in mode_set, otherwise a recursion may happen during ASR processing. Uncontrolled recursion may lead to stack overflows.
Using the same mutex (in particular a recursive mutex) in normal task context and during ASR processing may result in undefined behaviour.
Asynchronous signal handlers can access thread-local storage (TLS). When thread-local storage is shared between normal task context and ASR processing, it may be protected by disabled interrupts.
The following constraints apply to this directive:
| rtems_status_code rtems_signal_send | ( | rtems_id | id, |
| rtems_signal_set | signal_set | ||
| ) |
Sends the signal set to the task.
| id | is the identifier of the target task to receive the signal set. |
| signal_set | is the signal set to send. |
This directive sends the signal set, signal_set, to the target task identified by id.
If a caller sends a signal set to a task with an invalid ASR, then an error code is returned to the caller. If a caller sends a signal set to a task whose ASR is valid but disabled, then the signal set will be caught and left pending for the ASR to process when it is enabled. If a caller sends a signal set to a task with an ASR that is both valid and enabled, then the signal set is caught and the ASR will execute the next time the task is dispatched to run.
| RTEMS_SUCCESSFUL | The requested operation was successful. |
| RTEMS_INVALID_NUMBER | The signal_set parameter was 0. |
| RTEMS_INVALID_ID | There was no task associated with the identifier specified by id. |
| RTEMS_NOT_DEFINED | The target task had no valid ASR installed. |
Sending a signal set to a task has no effect on that task's state. If a signal set is sent to a blocked task, then the task will remain blocked and the signals will be processed when the task becomes the running task.
Sending a signal set to a global task which does not reside on the local node will generate a request telling the remote node to send the signal set to the specified task.
The following constraints apply to this directive: