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-2004 OAR Corporation