In general, a mode and its corresponding mask is built by a bitwise OR of the desired components. The set of valid mode constants and each mode's corresponding mask constant is listed below:
Mode Constant | Mask Constant | Description |
RTEMS.PREEMPT | RTEMS.PREEMPT_MASK | enables preemption |
RTEMS.NO_PREEMPT | RTEMS.PREEMPT_MASK | disables preemption |
RTEMS.NO_TIMESLICE | RTEMS.TIMESLICE_MASK | disables timeslicing |
RTEMS.TIMESLICE | RTEMS.TIMESLICE_MASK | enables timeslicing |
RTEMS.ASR | RTEMS.ASR_MASK | enables ASR processing |
RTEMS.NO_ASR | RTEMS.ASR_MASK | disables ASR processing |
RTEMS.INTERRUPT_LEVEL(0) | RTEMS.INTERRUPT_MASK | enables all interrupts |
RTEMS.INTERRUPT_LEVEL(n) | RTEMS.INTERRUPT_MASK | sets interrupts level n |
Mode values are specifically designed to be mutually exclusive, therefore
bitwise OR and addition operations are equivalent as long as each mode
appears exactly once in the component list. A mode component listed as a
default is not required to appear in the mode component list, although it
is a good programming practice to specify default components. If all
defaults are desired, the mode RTEMS.DEFAULT_MODES
and the
mask RTEMS.ALL_MODE_MASKS
should be used.
The following example demonstrates the mode and mask parameters used with
the rtems.task_mode
directive to place a task at interrupt level 3 and make it
non-preemptible. The mode should be set to
RTEMS.INTERRUPT_LEVEL(3) or RTEMS.NO_PREEMPT
to indicate the desired preemption mode and
interrupt level, while the mask parameter should be set to
RTEMS.INTERRUPT_MASK or RTEMS.NO_PREEMPT_MASK
to indicate that the calling task's
interrupt level and preemption mode are being altered.
Copyright © 1988-2007OAR Corporation