RTEMS  5.1
Files | Data Structures | Macros | Typedefs | Functions
Tasks

Files

file  tasks.h
 Classic Task Manager API.
 
file  schedulermapfromposix.c
 Implementation of rtems_scheduler_map_priority_from_posix().
 
file  schedulermaptoposix.c
 Implementation of rtems_scheduler_map_priority_to_posix().
 
file  taskcreate.c
 RTEMS Task Create.
 
file  taskdelete.c
 RTEMS Delete Task.
 
file  taskgetaffinity.c
 RTEMS Task Get Affinity.
 
file  taskident.c
 RTEMS Task Name to Id.
 
file  taskinitusers.c
 _RTEMS_tasks_Initialize_user_tasks_body
 
file  taskissuspended.c
 rtems_task_is_suspended
 
file  taskmode.c
 RTEMS Task Mode.
 
file  taskrestart.c
 RTEMS Task Restart.
 
file  taskresume.c
 RTEMS Resume Task.
 
file  tasks.c
 RTEMS Task API Extensions.
 
file  taskself.c
 RTEMS Get Self Task Id.
 
file  tasksetaffinity.c
 RTEMS Task Set Affinity.
 
file  tasksetpriority.c
 RTEMS Set Task Priority.
 
file  taskstart.c
 RTEMS Start Task.
 
file  tasksuspend.c
 RTEMS Suspend Task.
 
file  taskwakeafter.c
 RTEMS Task Wake After.
 
file  taskwakewhen.c
 RTEMS Task Wake When.
 

Data Structures

struct  rtems_initialization_tasks_table
 
struct  rtems_time_of_day
 Data structure to manage and manipulate calendar time. More...
 

Macros

#define RTEMS_MILLISECONDS_TO_MICROSECONDS(_ms)   ((_ms) * 1000UL)
 Returns the number of micro seconds for the milli seconds value _ms.
 
#define RTEMS_MILLISECONDS_TO_TICKS(_ms)
 Returns the number of ticks for the milli seconds value _ms. More...
 
#define RTEMS_MICROSECONDS_TO_TICKS(_us)   ((_us) / rtems_configuration_get_microseconds_per_tick())
 Returns the number of ticks for the micro seconds value _us.
 
#define RTEMS_SELF   OBJECTS_ID_OF_SELF
 
#define RTEMS_YIELD_PROCESSOR   WATCHDOG_NO_TIMEOUT
 
#define RTEMS_NO_PRIORITY   RTEMS_CURRENT_PRIORITY
 
#define RTEMS_MINIMUM_PRIORITY   1
 
#define RTEMS_MAXIMUM_PRIORITY   _RTEMS_Maximum_priority()
 
#define RTEMS_CURRENT_PRIORITY   0
 
#define rtems_scheduler_get_processor()   _SMP_Get_current_processor()
 Returns the index of the current processor. More...
 
#define rtems_scheduler_get_processor_maximum()   _SMP_Get_processor_maximum()
 Returns the processor maximum supported by the system. More...
 
#define RTEMS_ID_NONE   OBJECTS_ID_NONE
 Invalid object identifier value. More...
 

Typedefs

typedef uint32_t rtems_task_priority
 
typedef struct _Thread_Control rtems_tcb
 
typedef void rtems_task
 
typedef CPU_Uint32ptr rtems_task_argument
 
typedef rtems_task(* rtems_task_entry) (rtems_task_argument)
 
typedef bool(* rtems_task_visitor) (rtems_tcb *tcb, void *arg)
 Task visitor. More...
 
typedef uint32_t rtems_name
 Classic API object name type. More...
 
typedef Objects_Id rtems_id
 Used to manage and manipulate RTEMS object identifiers.
 
typedef Context_Control rtems_context RTEMS_DEPRECATED
 Public name for task context area. More...
 
typedef CPU_Interrupt_frame rtems_interrupt_frame
 Defines the format of the interrupt stack frame as it appears to a user ISR. More...
 
typedef Watchdog_Interval rtems_interval
 Used to manage and manipulate intervals specified by clock ticks.
 

Functions

RTEMS_INLINE_ROUTINE bool rtems_is_name_valid (rtems_name name)
 Returns true if the name is valid, and false otherwise.
 
RTEMS_INLINE_ROUTINE void rtems_name_to_characters (rtems_name name, char *c1, char *c2, char *c3, char *c4)
 Breaks the object name into the four component characters c1, c2, c3, and c4.
 
rtems_task_priority _RTEMS_Maximum_priority (void)
 
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)
 RTEMS Task Create. More...
 
rtems_status_code rtems_task_ident (rtems_name name, uint32_t node, rtems_id *id)
 RTEMS Task Name to Id. More...
 
rtems_status_code rtems_task_delete (rtems_id id)
 RTEMS Delete Task. More...
 
void rtems_task_exit (void) RTEMS_NO_RETURN
 
rtems_status_code rtems_task_mode (rtems_mode mode_set, rtems_mode mask, rtems_mode *previous_mode_set)
 RTEMS Task Mode. More...
 
rtems_status_code rtems_task_restart (rtems_id id, rtems_task_argument argument)
 RTEMS Task Restart. More...
 
rtems_status_code rtems_task_suspend (rtems_id id)
 RTEMS Suspend Task. More...
 
rtems_status_code rtems_task_resume (rtems_id id)
 RTEMS Resume Task. More...
 
rtems_status_code rtems_task_set_priority (rtems_id id, rtems_task_priority new_priority, rtems_task_priority *old_priority)
 RTEMS Set Task Priority. More...
 
rtems_status_code rtems_task_get_priority (rtems_id task_id, rtems_id scheduler_id, rtems_task_priority *priority)
 Gets the current priority of the specified task with respect to the specified scheduler instance. More...
 
rtems_status_code rtems_task_start (rtems_id id, rtems_task_entry entry_point, rtems_task_argument argument)
 RTEMS Start Task. More...
 
rtems_status_code rtems_task_wake_when (rtems_time_of_day *time_buffer)
 RTEMS Task Wake When. More...
 
rtems_status_code rtems_task_wake_after (rtems_interval ticks)
 RTEMS Task Wake After. More...
 
rtems_status_code rtems_task_is_suspended (rtems_id id)
 rtems_task_is_suspended More...
 
rtems_status_code rtems_task_get_affinity (rtems_id id, size_t cpusetsize, cpu_set_t *cpuset)
 Gets the processor affinity set of a task. More...
 
rtems_status_code rtems_task_set_affinity (rtems_id id, size_t cpusetsize, const cpu_set_t *cpuset)
 Sets the processor affinity set of a task. More...
 
rtems_status_code rtems_task_get_scheduler (rtems_id task_id, rtems_id *scheduler_id)
 Gets the scheduler of a task. More...
 
rtems_status_code rtems_task_set_scheduler (rtems_id task_id, rtems_id scheduler_id, rtems_task_priority priority)
 Sets the scheduler instance of a task. More...
 
rtems_id rtems_task_self (void)
 RTEMS Get Self Task Id. More...
 
void rtems_task_iterate (rtems_task_visitor visitor, void *arg)
 Iterates over all tasks in the system. More...
 
rtems_status_code rtems_scheduler_ident (rtems_name name, rtems_id *id)
 Identifies a scheduler by its name. More...
 
rtems_status_code rtems_scheduler_ident_by_processor (uint32_t cpu_index, rtems_id *id)
 Identifies a scheduler by a processor index. More...
 
rtems_status_code rtems_scheduler_ident_by_processor_set (size_t cpusetsize, const cpu_set_t *cpuset, rtems_id *id)
 Identifies a scheduler by a processor set. More...
 
RTEMS_DEPRECATED RTEMS_INLINE_ROUTINE uint32_t rtems_get_current_processor (void)
 Returns the index of the current processor. More...
 
RTEMS_DEPRECATED RTEMS_INLINE_ROUTINE uint32_t rtems_get_processor_count (void)
 Returns the processor maximum supported by the system. More...
 
rtems_status_code rtems_scheduler_get_processor_set (rtems_id scheduler_id, size_t cpusetsize, cpu_set_t *cpuset)
 Gets the set of processors owned by the specified scheduler instance. More...
 
rtems_status_code rtems_scheduler_add_processor (rtems_id scheduler_id, uint32_t cpu_index)
 Adds a processor to the set of processors owned by the specified scheduler instance. More...
 
rtems_status_code rtems_scheduler_remove_processor (rtems_id scheduler_id, uint32_t cpu_index)
 Removes a processor from set of processors owned by the specified scheduler instance. More...
 
rtems_status_code rtems_scheduler_get_maximum_priority (rtems_id scheduler_id, rtems_task_priority *priority)
 Gets the maximum task priority of the specified scheduler instance. More...
 
rtems_status_code rtems_scheduler_map_priority_to_posix (rtems_id scheduler_id, rtems_task_priority priority, int *posix_priority)
 Map a task priority to the corresponding POSIX thread priority. More...
 
rtems_status_code rtems_scheduler_map_priority_from_posix (rtems_id scheduler_id, int posix_priority, rtems_task_priority *priority)
 Map a POSIX thread priority to the corresponding task priority. More...
 

Detailed Description

This encapsulates the functionality of the Classic API Task Manager. This functionality includes task services such as creation, deletion, delays, suspend/resume, and manipulation of execution mode and priority.

Task Definition

Many definitions of a task have been proposed in computer literature. Unfortunately, none of these definitions encompasses all facets of the concept in a manner which is operating system independent. Several of the more common definitions are provided to enable each user to select a definition which best matches their own experience and understanding of the task concept:

From RTEMS' perspective, a task is the smallest thread of execution which can compete on its own for system resources. A task is manifested by the existence of a task control block (TCB).

Task Control Block

The Task Control Block (TCB) is an RTEMS defined data structure which contains all the information that is pertinent to the execution of a task. During system initialization, RTEMS reserves a TCB for each task configured. A TCB is allocated upon creation of the task and is returned to the TCB free list upon deletion of the task.

The TCB's elements are modified as a result of system calls made by the application in response to external and internal stimuli. TCBs are the only RTEMS internal data structure that can be accessed by an application via user extension routines. The TCB contains a task's name, ID, current priority, current and starting states, execution mode, TCB user extension pointer, scheduling control structures, as well as data required by a blocked task.

A task's context is stored in the TCB when a task switch occurs. When the task regains control of the processor, its context is restored from the TCB. When a task is restarted, the initial state of the task is restored from the starting context area in the task's TCB.

Task States

A task may exist in one of the following five states:

An active task may occupy the executing, ready, blocked or dormant state, otherwise the task is considered non-existent. One or more tasks may be active in the system simultaneously. Multiple tasks communicate, synchronize, and compete for system resources with each other via system calls. The multiple tasks appear to execute in parallel, but actually each is dispatched to the CPU for periods of time determined by the RTEMS scheduling algorithm. The scheduling of a task is based on its current state and priority.

Task Priority

A task's priority determines its importance in relation to the other tasks executing on the same processor. RTEMS supports 255 levels of priority ranging from 1 to 255. The data type rtems_task_priority() is used to store task priorities.

Tasks of numerically smaller priority values are more important tasks than tasks of numerically larger priority values. For example, a task at priority level 5 is of higher privilege than a task at priority level 10. There is no limit to the number of tasks assigned to the same priority.

Each task has a priority associated with it at all times. The initial value of this priority is assigned at task creation time. The priority of a task may be changed at any subsequent time.

Priorities are used by the scheduler to determine which ready task will be allowed to execute. In general, the higher the logical priority of a task, the more likely it is to receive processor execution time.

Task Mode

A task's execution mode is a combination of the following four components:

It is used to modify RTEMS' scheduling process and to alter the execution environment of the task. The data type rtems_task_mode() is used to manage the task execution mode.

The preemption component allows a task to determine when control of the processor is relinquished. If preemption is disabled (RTEMS_NO_PREEMPT), the task will retain control of the processor as long as it is in the executing state – even if a higher priority task is made ready. If preemption is enabled (RTEMS_PREEMPT) and a higher priority task is made ready, then the processor will be taken away from the current task immediately and given to the higher priority task.

The timeslicing component is used by the RTEMS scheduler to determine how the processor is allocated to tasks of equal priority. If timeslicing is enabled (RTEMS_TIMESLICE), then RTEMS will limit the amount of time the task can execute before the processor is allocated to another ready task of equal priority. The length of the timeslice is application dependent and specified in the Configuration Table. If timeslicing is disabled (RTEMS_NO_TIMESLICE), then the task will be allowed to execute until a task of higher priority is made ready. If RTEMS_NO_PREEMPT is selected, then the timeslicing component is ignored by the scheduler.

The asynchronous signal processing component is used to determine when received signals are to be processed by the task. If signal processing is enabled (RTEMS_ASR), then signals sent to the task will be processed the next time the task executes. If signal processing is disabled (RTEMS_NO_ASR), then all signals received by the task will remain posted until signal processing is enabled. This component affects only tasks which have established a routine to process asynchronous signals.

The interrupt level component is used to determine which interrupts will be enabled when the task is executing. RTEMS_INTERRUPT_LEVEL(n) specifies that the task will execute at interrupt level n.

The set of default modes may be selected by specifying the RTEMS_DEFAULT_MODES constant.

Accessing Task Arguments

All RTEMS tasks are invoked with a single argument which is specified when they are started or restarted. The argument is commonly used to communicate startup information to the task. The simplest manner in which to define a task which accesses it argument is:

rtems_task user_task(
);

Application tasks requiring more information may view this single argument as an index into an array of parameter blocks.

Floating Point Considerations

Creating a task with the RTEMS_FLOATING_POINT attribute flag results in additional memory being allocated for the TCB to store the state of the numeric coprocessor during task switches. This additional memory is NOT allocated for RTEMS_NO_FLOATING_POINT tasks. Saving and restoring the context of a RTEMS_FLOATING_POINT task takes longer than that of a RTEMS_NO_FLOATING_POINT task because of the relatively large amount of time required for the numeric coprocessor to save or restore its computational state.

Since RTEMS was designed specifically for embedded military applications which are floating point intensive, the executive is optimized to avoid unnecessarily saving and restoring the state of the numeric coprocessor. The state of the numeric coprocessor is only saved when a RTEMS_FLOATING_POINT task is dispatched and that task was not the last task to utilize the coprocessor. In a system with only one RTEMS_FLOATING_POINT task, the state of the numeric coprocessor will never be saved or restored.

Although the overhead imposed by RTEMS_FLOATING_POINT tasks is minimal, some applications may wish to completely avoid the overhead associated with RTEMS_FLOATING_POINT tasks and still utilize a numeric coprocessor. By preventing a task from being preempted while performing a sequence of floating point operations, a RTEMS_NO_FLOATING_POINT task can utilize the numeric coprocessor without incurring the overhead of a RTEMS_FLOATING_POINT context switch. This approach also avoids the allocation of a floating point context area. However, if this approach is taken by the application designer, NO tasks should be created as RTEMS_FLOATING_POINT tasks. Otherwise, the floating point context will not be correctly maintained because RTEMS assumes that the state of the numeric coprocessor will not be altered by RTEMS_NO_FLOATING_POINT tasks.

If the supported processor type does not have hardware floating capabilities or a standard numeric coprocessor, RTEMS will not provide built-in support for hardware floating point on that processor. In this case, all tasks are considered RTEMS_NO_FLOATING_POINT whether created as RTEMS_FLOATING_POINT or RTEMS_NO_FLOATING_POINT tasks. A floating point emulation software library must be utilized for floating point operations.

On some processors, it is possible to disable the floating point unit dynamically. If this capability is supported by the target processor, then RTEMS will utilize this capability to enable the floating point unit only for tasks which are created with the RTEMS_FLOATING_POINT attribute. The consequence of a RTEMS_NO_FLOATING_POINT task attempting to access the floating point unit is CPU dependent but will generally result in an exception condition.

Per Task Variables

Per task variables are no longer available. In particular the rtems_task_variable_add(), rtems_task_variable_get() and rtems_task_variable_delete() functions are neither declared nor defined anymore. Use thread local storage or POSIX Keys instead.

Building a Task Attribute Set

In general, an attribute set is built by a bitwise OR of the desired components. The set of valid task attribute components is listed below:

Attribute values are specifically designed to be mutually exclusive, therefore bitwise OR and addition operations are equivalent as long as each attribute appears exactly once in the component list. A component listed as a default is not required to appear in the component list, although it is a good programming practice to specify default components. If all defaults are desired, then RTEMS_DEFAULT_ATTRIBUTES should be used. This example demonstrates the attribute_set parameter needed to create a local task which utilizes the numeric coprocessor. The attribute_set parameter could be RTEMS_FLOATING_POINT or RTEMS_LOCAL | RTEMS_FLOATING_POINT. The attribute_set parameter can be set to RTEMS_FLOATING_POINT because RTEMS_LOCAL is the default for all created tasks. If the task were global and used the numeric coprocessor, then the attribute_set parameter would be RTEMS_GLOBAL | RTEMS_FLOATING_POINT.

Building a Mode and Mask

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 ConstantMask ConstantDescription
RTEMS_PREEMPTRTEMS_PREEMPT_MASKenables preemption
RTEMS_NO_PREEMPTRTEMS_PREEMPT_MASKdisables preemption
RTEMS_NO_TIMESLICERTEMS_TIMESLICE_MASKdisables timeslicing
RTEMS_TIMESLICERTEMS_TIMESLICE_MASKenables timeslicing
RTEMS_ASRRTEMS_ASR_MASKenables ASR processing
RTEMS_NO_ASRRTEMS_ASR_MASKdisables ASR processing
RTEMS_INTERRUPT_LEVEL(0)RTEMS_INTERRUPT_MASKenables all interrupts
RTEMS_INTERRUPT_LEVEL(n)RTEMS_INTERRUPT_MASKsets 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) | RTEMS_NO_PREEMPT to indicate the desired preemption mode and interrupt level, while the mask parameter should be set to RTEMS_INTERRUPT_MASK | RTEMS_PREEMPT_MASK to indicate that the calling task's interrupt level and preemption mode are being altered.

Macro Definition Documentation

◆ RTEMS_CURRENT_PRIORITY

#define RTEMS_CURRENT_PRIORITY   0

The following constant is passed to rtems_task_set_priority when the caller wants to obtain the current priority.

◆ RTEMS_ID_NONE

#define RTEMS_ID_NONE   OBJECTS_ID_NONE

Invalid object identifier value.

No object can have this identifier value.

◆ RTEMS_MAXIMUM_PRIORITY

#define RTEMS_MAXIMUM_PRIORITY   _RTEMS_Maximum_priority()

This run-time constant is the maximum valid value for a Classic API task priority.

Note
This is actually the priority of the IDLE thread so using this priority will result in having a task which never executes. This could be useful if you want to ensure that a task does not executes during certain operations such as a system mode change.

◆ RTEMS_MILLISECONDS_TO_TICKS

#define RTEMS_MILLISECONDS_TO_TICKS (   _ms)
Value:
rtems_configuration_get_microseconds_per_tick())
#define RTEMS_MILLISECONDS_TO_MICROSECONDS(_ms)
Returns the number of micro seconds for the milli seconds value _ms.
Definition: support.h:33

Returns the number of ticks for the milli seconds value _ms.

◆ RTEMS_MINIMUM_PRIORITY

#define RTEMS_MINIMUM_PRIORITY   1

This constant is the least valid value for a Classic API task priority.

◆ RTEMS_NO_PRIORITY

#define RTEMS_NO_PRIORITY   RTEMS_CURRENT_PRIORITY

This is the constant used with the rtems_task_set_priority directive to indicate that the caller wants to obtain its current priority rather than set it as the name of the directive indicates.

◆ rtems_scheduler_get_processor

#define rtems_scheduler_get_processor ( )    _SMP_Get_current_processor()

Returns the index of the current processor.

In uniprocessor configurations, a value of zero will be returned.

In SMP configurations, an architecture specific method is used to obtain the index of the current processor in the system. The set of processor indices is the range of integers starting with zero up to the processor count minus one.

Outside of sections with disabled thread dispatching the current processor index may change after every instruction since the thread may migrate from one processor to another. Sections with disabled interrupts are sections with thread dispatching disabled.

Returns
The index of the current processor.

◆ rtems_scheduler_get_processor_maximum

#define rtems_scheduler_get_processor_maximum ( )    _SMP_Get_processor_maximum()

Returns the processor maximum supported by the system.

In uniprocessor configurations, a value of one will be returned.

In SMP configurations, this function returns the minimum of the processors (physically or virtually) available by the platform and the configured processor maximum. Not all processors in the range from processor index zero to the last processor index (which is the processor maximum minus one) may be configured to be used by a scheduler or online (online processors have a scheduler assigned).

Returns
The processor maximum supported by the system.
See also
rtems_scheduler_add_processor() and rtems_scheduler_remove_processor().

◆ RTEMS_SELF

#define RTEMS_SELF   OBJECTS_ID_OF_SELF

Constant to be used as the ID of current task

◆ RTEMS_YIELD_PROCESSOR

#define RTEMS_YIELD_PROCESSOR   WATCHDOG_NO_TIMEOUT

This constant is passed to the rtems_task_wake_after directive as the interval when a task wishes to yield the CPU.

Typedef Documentation

◆ RTEMS_DEPRECATED

typedef struct timespec rtems_thread_cpu_usage_t RTEMS_DEPRECATED

Public name for task context area.

Represents the CPU usage per thread.

Information structure returned by the Heap Handler via the Region Manager.

Public name for task floating point context area.

When using nanoseconds granularity timing, RTEMS may internally use a variety of representations.

◆ rtems_interrupt_frame

Defines the format of the interrupt stack frame as it appears to a user ISR.

This data structure is only provided if the interrupt stack frame is passed to the ISR handler.

See also
rtems_interrupt_catch().

◆ rtems_name

typedef uint32_t rtems_name

Classic API object name type.

Contains the name of a Classic API object. It is an unsigned 32-bit integer which can be treated as a numeric value or initialized using rtems_build_name() to contain four ASCII characters.

◆ rtems_task

typedef void rtems_task

The following defines the "return type" of an RTEMS task.

◆ rtems_task_argument

The following defines the argument to an RTEMS task.

◆ rtems_task_entry

typedef rtems_task( * rtems_task_entry) (rtems_task_argument)

The following defines the type for the entry point of an RTEMS task.

◆ rtems_task_priority

typedef uint32_t rtems_task_priority

Define the type for an RTEMS API task priority.

◆ rtems_task_visitor

typedef bool( * rtems_task_visitor) (rtems_tcb *tcb, void *arg)

Task visitor.

Parameters
[in]tcbThe task control block.
[in]argThe visitor argument.
Return values
trueStop the iteration.
falseOtherwise.
See also
rtems_task_iterate().

◆ rtems_tcb

typedef struct _Thread_Control rtems_tcb

External API name for Thread_Control

Function Documentation

◆ rtems_get_current_processor()

RTEMS_DEPRECATED RTEMS_INLINE_ROUTINE uint32_t rtems_get_current_processor ( void  )

Returns the index of the current processor.

Returns
The index of the current processor.
Deprecated:

Use rtems_scheduler_get_processor() instead.

◆ rtems_get_processor_count()

RTEMS_DEPRECATED RTEMS_INLINE_ROUTINE uint32_t rtems_get_processor_count ( void  )

Returns the processor maximum supported by the system.

Returns
The processor maximum supported by the system.
Deprecated:

Use rtems_scheduler_get_processor_maximum() instead.

◆ rtems_scheduler_add_processor()

rtems_status_code rtems_scheduler_add_processor ( rtems_id  scheduler_id,
uint32_t  cpu_index 
)

Adds a processor to the set of processors owned by the specified scheduler instance.

Must be called from task context. This operation obtains and releases the objects allocator lock.

Parameters
[in]scheduler_idIdentifier of the scheduler instance.
[in]cpu_indexIndex of the processor to add.
Return values
RTEMS_SUCCESSFULSuccessful operation.
RTEMS_INVALID_IDInvalid scheduler instance identifier.
RTEMS_NOT_CONFIGUREDThe processor is not configured to be used by the application.
RTEMS_INCORRECT_STATEThe processor is configured to be used by the application, however, it is not online.
RTEMS_RESOURCE_IN_USEThe processor is already assigned to a scheduler instance.

◆ rtems_scheduler_get_maximum_priority()

rtems_status_code rtems_scheduler_get_maximum_priority ( rtems_id  scheduler_id,
rtems_task_priority priority 
)

Gets the maximum task priority of the specified scheduler instance.

Parameters
[in]scheduler_idIdentifier of the scheduler instance.
[out]priorityPointer to a task priority value.
Return values
RTEMS_SUCCESSFULSuccessful operation.
RTEMS_INVALID_ADDRESSThe priority parameter is NULL.
RTEMS_INVALID_IDInvalid scheduler instance identifier.

◆ rtems_scheduler_get_processor_set()

rtems_status_code rtems_scheduler_get_processor_set ( rtems_id  scheduler_id,
size_t  cpusetsize,
cpu_set_t *  cpuset 
)

Gets the set of processors owned by the specified scheduler instance.

Parameters
[in]scheduler_idIdentifier of the scheduler instance.
[in]cpusetsizeSize of the specified processor set buffer in bytes. This value must be positive.
[out]cpusetThe processor set owned by the scheduler. A set bit in the processor set means that this processor is owned by the scheduler and a cleared bit means the opposite.
Return values
RTEMS_SUCCESSFULSuccessful operation.
RTEMS_INVALID_ADDRESSThe cpuset parameter is NULL.
RTEMS_INVALID_IDInvalid scheduler instance identifier.
RTEMS_INVALID_NUMBERThe processor set buffer is too small for the set of processors owned by the scheduler.

◆ rtems_scheduler_ident()

rtems_status_code rtems_scheduler_ident ( rtems_name  name,
rtems_id id 
)

Identifies a scheduler by its name.

The scheduler name is determined by the scheduler configuration.

Parameters
[in]nameThe scheduler name.
[out]idThe scheduler identifier associated with the name.
Return values
RTEMS_SUCCESSFULSuccessful operation.
RTEMS_INVALID_ADDRESSThe id parameter is NULL.
RTEMS_INVALID_NAMEInvalid scheduler name.

◆ rtems_scheduler_ident_by_processor()

rtems_status_code rtems_scheduler_ident_by_processor ( uint32_t  cpu_index,
rtems_id id 
)

Identifies a scheduler by a processor index.

Parameters
[in]cpu_indexThe processor index.
[out]idThe scheduler identifier associated with the processor index.
Return values
RTEMS_SUCCESSFULSuccessful operation.
RTEMS_INVALID_ADDRESSThe id parameter is NULL.
RTEMS_INVALID_NAMEInvalid processor index.
RTEMS_INCORRECT_STATEThe processor index is valid, however, this processor is not owned by a scheduler.

◆ rtems_scheduler_ident_by_processor_set()

rtems_status_code rtems_scheduler_ident_by_processor_set ( size_t  cpusetsize,
const cpu_set_t *  cpuset,
rtems_id id 
)

Identifies a scheduler by a processor set.

The scheduler is selected according to the highest numbered online processor in the specified processor set.

Parameters
[in]cpusetsizeSize of the specified processor set buffer in bytes. This value must be positive.
[out]cpusetThe processor set to identify the scheduler.
[out]idThe scheduler identifier associated with the processor set.
Return values
RTEMS_SUCCESSFULSuccessful operation.
RTEMS_INVALID_ADDRESSThe id parameter is NULL.
RTEMS_INVALID_SIZEInvalid processor set size.
RTEMS_INVALID_NAMEThe processor set contains no online processor.
RTEMS_INCORRECT_STATEThe processor set is valid, however, the highest numbered online processor in the specified processor set is not owned by a scheduler.

◆ rtems_scheduler_map_priority_from_posix()

rtems_status_code rtems_scheduler_map_priority_from_posix ( rtems_id  scheduler_id,
int  posix_priority,
rtems_task_priority priority 
)

Map a POSIX thread priority to the corresponding task priority.

Parameters
scheduler_idIdentifier of the scheduler instance.
posix_priorityThe POSIX thread priority to map.
[out]priorityPointer to a task priority value.
Return values
RTEMS_SUCCESSFULSuccessful operation.
RTEMS_INVALID_ADDRESSThe priority parameter is NULL.
RTEMS_INVALID_IDInvalid scheduler instance identifier.
RTEMS_INVALID_PRIORITYInvalid POSIX thread priority.

◆ rtems_scheduler_map_priority_to_posix()

rtems_status_code rtems_scheduler_map_priority_to_posix ( rtems_id  scheduler_id,
rtems_task_priority  priority,
int *  posix_priority 
)

Map a task priority to the corresponding POSIX thread priority.

Parameters
scheduler_idIdentifier of the scheduler instance.
priorityThe task priority to map.
[out]posix_priorityPointer to a POSIX thread priority value.
Return values
RTEMS_SUCCESSFULSuccessful operation.
RTEMS_INVALID_ADDRESSThe posix_priority parameter is NULL.
RTEMS_INVALID_IDInvalid scheduler instance identifier.
RTEMS_INVALID_PRIORITYInvalid task priority.

◆ rtems_scheduler_remove_processor()

rtems_status_code rtems_scheduler_remove_processor ( rtems_id  scheduler_id,
uint32_t  cpu_index 
)

Removes a processor from set of processors owned by the specified scheduler instance.

Must be called from task context. This operation obtains and releases the objects allocator lock. Removing a processor from a scheduler is a complex operation that involves all tasks of the system.

Parameters
[in]scheduler_idIdentifier of the scheduler instance.
[in]cpu_indexIndex of the processor to add.
Return values
RTEMS_SUCCESSFULSuccessful operation.
RTEMS_INVALID_IDInvalid scheduler instance identifier.
RTEMS_INVALID_NUMBERThe processor is not owned by the specified scheduler instance.
RTEMS_RESOURCE_IN_USEThe set of processors owned by the specified scheduler instance would be empty after the processor removal and there exists a non-idle task that uses this scheduler instance as its home scheduler instance.

◆ rtems_task_create()

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 
)

RTEMS Task Create.

This routine implements the rtems_task_create directive. The task will have the name name. The attribute_set can be used to indicate that the task will be globally accessible or utilize floating point. The task's stack will be stack_size bytes. The task will begin execution with initial_priority and initial_modes. It returns the id of the created task in ID.

Parameters
[in]nameis the user defined thread name
[in]initial_priorityis the thread priority
[in]stack_sizeis the stack size in bytes
[in]initial_modesis the initial thread mode
[in]attribute_setis the thread attributes
[in]idis the pointer to thread id
Return values
RTEMS_SUCCESSFULif successful or error code if unsuccessful and *id thread id filled in

◆ rtems_task_delete()

rtems_status_code rtems_task_delete ( rtems_id  id)

RTEMS Delete Task.

This routine implements the rtems_task_delete directive. The task indicated by ID is deleted. The executive halts execution of the thread and frees the thread control block.

Parameters
[in]idis the thread id
Return values
Thismethod returns RTEMS_SUCCESSFUL if there was not an error and id is not the requesting thread. Status code is returned indicating the source of the error. Nothing is returned if id is the requesting thread (always succeeds).

◆ rtems_task_get_affinity()

rtems_status_code rtems_task_get_affinity ( rtems_id  id,
size_t  cpusetsize,
cpu_set_t *  cpuset 
)

Gets the processor affinity set of a task.

Parameters
[in]idIdentifier of the task. Use RTEMS_SELF to select the executing task.
[in]cpusetsizeSize of the specified affinity set buffer in bytes. This value must be positive.
[out]cpusetThe current processor affinity set of the task. A set bit in the affinity set means that the task can execute on this processor and a cleared bit means the opposite.
Return values
RTEMS_SUCCESSFULSuccessful operation.
RTEMS_INVALID_ADDRESSThe cpuset parameter is NULL.
RTEMS_INVALID_IDInvalid task identifier.
RTEMS_INVALID_NUMBERThe affinity set buffer is too small for the current processor affinity set of the task.

◆ rtems_task_get_priority()

rtems_status_code rtems_task_get_priority ( rtems_id  task_id,
rtems_id  scheduler_id,
rtems_task_priority priority 
)

Gets the current priority of the specified task with respect to the specified scheduler instance.

The current priority reflects temporary priority adjustments due to locking protocols, the rate-monotonic period objects on some schedulers and other mechanisms.

Parameters
[in]task_idIdentifier of the task. Use RTEMS_SELF to select the executing task.
[in]scheduler_idIdentifier of the scheduler instance.
[out]priorityReturns the current priority of the specified task with respect to the specified scheduler instance.
Return values
RTEMS_SUCCESSFULSuccessful operation.
RTEMS_ILLEGAL_ON_REMOTE_OBJECTDirective is illegal on remote tasks.
RTEMS_INVALID_ADDRESSThe priority parameter is NULL.
RTEMS_INVALID_IDInvalid task or scheduler identifier.
RTEMS_NOT_DEFINEDThe task has no priority within the specified scheduler instance. This error is only possible on SMP configurations.
See also
rtems_scheduler_ident().

◆ rtems_task_get_scheduler()

rtems_status_code rtems_task_get_scheduler ( rtems_id  task_id,
rtems_id scheduler_id 
)

Gets the scheduler of a task.

Parameters
[in]task_idIdentifier of the task. Use RTEMS_SELF to select the executing task.
[out]scheduler_idIdentifier of the scheduler instance.
Return values
RTEMS_SUCCESSFULSuccessful operation.
RTEMS_INVALID_ADDRESSThe scheduler_id parameter is NULL.
RTEMS_INVALID_IDInvalid task identifier.

◆ rtems_task_ident()

rtems_status_code rtems_task_ident ( rtems_name  name,
uint32_t  node,
rtems_id id 
)

RTEMS Task Name to Id.

This routine implements the rtems_task_ident directive. This directive returns the task ID associated with name. If more than one task is named name, then the task to which the ID belongs is arbitrary. node indicates the extent of the search for the ID of the task named name. The search can be limited to a particular node or allowed to encompass all nodes.

Parameters
[in]nameis the user defined thread name
[in]nodeis(are) the node(s) to be searched
[in]idis the pointer to thread id
Return values
Thismethod returns RTEMS_SUCCESSFUL if there was not an error. Otherwise, a status code is returned indicating the source of the error. If successful, the id will be filled in with the thread id.

◆ rtems_task_is_suspended()

rtems_status_code rtems_task_is_suspended ( rtems_id  id)

rtems_task_is_suspended

This directive returns a status indicating whether or not the specified task is suspended.

◆ rtems_task_iterate()

void rtems_task_iterate ( rtems_task_visitor  visitor,
void *  arg 
)

Iterates over all tasks in the system.

This operation covers all tasks of all APIs.

Must be called from task context. This operation obtains and releases the objects allocator lock. The task visitor is called while owning the objects allocator lock. It is possible to perform blocking operations in the task visitor, however, take care that no deadlocks via the object allocator lock can occur.

Parameters
[in]visitorThe task visitor.
[in]argThe visitor argument.

◆ rtems_task_mode()

rtems_status_code rtems_task_mode ( rtems_mode  mode_set,
rtems_mode  mask,
rtems_mode previous_mode_set 
)

RTEMS Task Mode.

This routine implements the rtems_task_mode directive. The current values of the modes indicated by mask of the calling task are changed to that indicated in mode_set. The former mode of the task is returned in mode_set.

Parameters
[in]mode_setis the new mode
[in]maskis the mask
[in]previous_mode_setis the address of previous mode set
Return values
RTEMS_SUCCESSFULand previous_mode_set filled in with the previous mode set

◆ rtems_task_restart()

rtems_status_code rtems_task_restart ( rtems_id  id,
rtems_task_argument  argument 
)

RTEMS Task Restart.

This routine implements the rtems_task_restart directive. The task associated with ID is restarted at its initial entry point with the new argument.

Parameters
[in]idis the thread id
[in]argumentis the thread argument
Return values
RTEMS_SUCCESSFULif successful or error code if unsuccessful

◆ rtems_task_resume()

rtems_status_code rtems_task_resume ( rtems_id  id)

RTEMS Resume Task.

This routine implements the rtems_task_resume Directive. The SUSPENDED state is cleared for task associated with ID.

Parameters
[in]idis the thread id
Return values
Thismethod returns RTEMS_SUCCESSFUL if there was not an error. Otherwise, a status code is returned indicating the source of the error.

◆ rtems_task_self()

rtems_id rtems_task_self ( void  )

RTEMS Get Self Task Id.

This directive returns the ID of the currently executing task.

◆ rtems_task_set_affinity()

rtems_status_code rtems_task_set_affinity ( rtems_id  id,
size_t  cpusetsize,
const cpu_set_t *  cpuset 
)

Sets the processor affinity set of a task.

This function will not change the scheduler of the task. The intersection of the processor affinity set and the set of processors owned by the scheduler of the task must be non-empty. It is not an error if the processor affinity set contains processors that are not part of the set of processors owned by the scheduler instance of the task. A task will simply not run under normal circumstances on these processors since the scheduler ignores them. Some locking protocols may temporarily use processors that are not included in the processor affinity set of the task. It is also not an error if the processor affinity set contains processors that are not part of the system.

Parameters
[in]idIdentifier of the task. Use RTEMS_SELF to select the executing task.
[in]cpusetsizeSize of the specified affinity set buffer in bytes. This value must be positive.
[in]cpusetThe new processor affinity set for the task. A set bit in the affinity set means that the task can execute on this processor and a cleared bit means the opposite.
Return values
RTEMS_SUCCESSFULSuccessful operation.
RTEMS_INVALID_ADDRESSThe cpuset parameter is NULL.
RTEMS_INVALID_IDInvalid task identifier.
RTEMS_INVALID_NUMBERInvalid processor affinity set.

◆ rtems_task_set_priority()

rtems_status_code rtems_task_set_priority ( rtems_id  id,
rtems_task_priority  new_priority,
rtems_task_priority old_priority 
)

RTEMS Set Task Priority.

This routine implements the rtems_task_set_priority directive. The current priority of the task associated with ID is set to new_priority. The former priority of that task is returned in old_priority.

Parameters
[in]idis the thread to extract
[in]new_priorityis the thread to extract
[in]old_priorityis the thread to extract
Return values
RTEMS_SUCCESSFULif successful or error code if unsuccessful and and *old_priority filled in with the previous previous priority

◆ rtems_task_set_scheduler()

rtems_status_code rtems_task_set_scheduler ( rtems_id  task_id,
rtems_id  scheduler_id,
rtems_task_priority  priority 
)

Sets the scheduler instance of a task.

Initially, the scheduler instance of a task is set to the scheduler instance of the task that created it. This directive allows to move a task from its current scheduler instance to another specified by the scheduler identifier.

Parameters
[in]task_idIdentifier of the task. Use RTEMS_SELF to select the executing task.
[in]scheduler_idIdentifier of the scheduler instance.
[in]priorityThe task priority with respect to the new scheduler instance. The real and initial priority of the task is set to this value. The initial priority is used by rtems_task_restart() for example.
Return values
RTEMS_SUCCESSFULSuccessful operation.
RTEMS_ILLEGAL_ON_REMOTE_OBJECTDirective is illegal on remote tasks.
RTEMS_INVALID_IDInvalid task or scheduler identifier.
RTEMS_INVALID_PRIORITYInvalid priority.
RTEMS_RESOURCE_IN_USEThe task owns resources which deny a scheduler change.
See also
rtems_scheduler_ident().

◆ rtems_task_start()

rtems_status_code rtems_task_start ( rtems_id  id,
rtems_task_entry  entry_point,
rtems_task_argument  argument 
)

RTEMS Start Task.

RTEMS Task Manager

This routine implements the rtems_task_start directive. The starting execution point of the task associated with ID is set to entry_point with the initial argument.

◆ rtems_task_suspend()

rtems_status_code rtems_task_suspend ( rtems_id  id)

RTEMS Suspend Task.

This routine implements the rtems_task_suspend directive. The SUSPENDED state is set for task associated with ID. Note that the suspended state can be in addition to other waiting states.

Parameters
[in]idis the thread id
Return values
Thismethod returns RTEMS_SUCCESSFUL if there was not an error. Otherwise, a status code is returned indicating the source of the error.

◆ rtems_task_wake_after()

rtems_status_code rtems_task_wake_after ( rtems_interval  ticks)

RTEMS Task Wake After.

This routine implements the rtems_task_wake_after directive. The calling task is blocked until the indicated number of clock ticks have occurred.

Parameters
[in]ticksis the number of ticks to wait
Return values
RTEMS_SUCCESSFUL

◆ rtems_task_wake_when()

rtems_status_code rtems_task_wake_when ( rtems_time_of_day time_buffer)

RTEMS Task Wake When.

This routine implements the rtems_task_wake_when directive. The calling task is blocked until the current time of day is equal to that indicated by time_buffer.

Parameters
[in]time_bufferis the pointer to the time and date structure
Return values
RTEMS_SUCCESSFULif successful or error code if unsuccessful