![]() |
CMSIS-RTOS2
Version 2.0.0
Real-Time Operating System: API and RTX Reference Implementation
|
Create events using flags. More...
Data Structures | |
struct | osEventFlagsAttr_t |
Attributes structure for event flags. More... | |
Typedefs | |
typedef void * | osEventFlagsId_t |
Functions | |
osEventFlagsId_t | osEventFlagsNew (const osEventFlagsAttr_t *attr) |
Create and Initialize an Event Flags object. More... | |
int32_t | osEventFlagsSet (osEventFlagsId_t ef_id, int32_t flags) |
Set the specified Event Flags. More... | |
int32_t | osEventFlagsClear (osEventFlagsId_t ef_id, int32_t flags) |
Clear the specified Event Flags. More... | |
int32_t | osEventFlagsGet (osEventFlagsId_t ef_id) |
Get the current Event Flags. More... | |
int32_t | osEventFlagsWait (osEventFlagsId_t ef_id, int32_t flags, uint32_t options, uint32_t timeout) |
Wait for one or more Event Flags to become signaled. More... | |
osStatus_t | osEventFlagsDelete (osEventFlagsId_t ef_id) |
Delete an Event Flags object. More... | |
Events are used to trigger execution states between threads. The event flag management functions in CMSIS-RTOS allow you to control or wait for event flags. Each signal has up to 31 event flags (int32_t flags provides 31 bits).
A thread
When a thread wakes up and resumes execution, its signal flags are automatically cleared.
Here is a simple example that shows how two thread can communicate with each others using event flags:
The following steps are required to use signals:
The following complete example code can be directly used with the "CMSIS-RTOS2 main template" and is also provided as a stand-alone template for RTX5:
Code Example
struct osEventFlagsAttr_t |
Data Fields | ||
---|---|---|
const char * | name |
name of the event flags String with a human readable name of the event object. |
uint32_t | attr_bits |
attribute bits No attributes available. |
void * | cb_mem |
memory for control block Pointer to a memory location for the event object. This can optionally be used for custom memory management systems. Specify NULL to use the kernel memory management. |
uint32_t | cb_size |
size of provided memory for control block The size of the memory block passed with cb_mem. Must be the size of an event object or larger. |
Event Flags ID identifies the event flags.
osEventFlagsId_t osEventFlagsNew | ( | const osEventFlagsAttr_t * | attr | ) |
[in] | attr | event flags attributes; NULL: default values. |
Create and initialize a Event Flag object that is used to send events across threads.
Code Example
int32_t osEventFlagsSet | ( | osEventFlagsId_t | ef_id, |
int32_t | flags | ||
) |
[in] | ef_id | event flags ID obtained by osEventFlagsNew. |
[in] | flags | specifies the flags that shall be set. |
Set the event flags in an event flags object. This function may be used also within interrupt service routines. All threads waiting for the flag set will be notified to resume from BLOCKED state.
Code Example
int32_t osEventFlagsClear | ( | osEventFlagsId_t | ef_id, |
int32_t | flags | ||
) |
[in] | ef_id | event flags ID obtained by osEventFlagsNew. |
[in] | flags | specifies the flags that shall be cleared. |
Clear the event flags of an event flags object.
int32_t osEventFlagsGet | ( | osEventFlagsId_t | ef_id | ) |
[in] | ef_id | event flags ID obtained by osEventFlagsNew. |
Return the event flags currently set in an event flags object.
int32_t osEventFlagsWait | ( | osEventFlagsId_t | ef_id, |
int32_t | flags, | ||
uint32_t | options, | ||
uint32_t | timeout | ||
) |
[in] | ef_id | event flags ID obtained by osEventFlagsNew. |
[in] | flags | specifies the flags to wait for. |
[in] | options | specifies flags options (osFlagsXxxx). |
[in] | timeout | Timeout Value or 0 in case of no time-out. |
Suspend the execution of the current RUNNING thread until any or all specified event flags with the parameter flags are set. The options parameter specifies the wait condition.
Option | |
---|---|
osFlagsWaitAny | Wait for any flag (default). |
osFlagsWaitAll | Wait for all flags. |
osFlagsNoClear | Do not clear flags which have been specified to wait for. |
If osFlagsNoClear is set in the options osEventFlagsClear can be used to clear flags manually.
When these event flags are already set, the function returns instantly. Otherwise the thread is put into the state BLOCKED.
osStatus_t osEventFlagsDelete | ( | osEventFlagsId_t | ef_id | ) |
[in] | ef_id | event flags ID obtained by osEventFlagsNew. |
Delete an event flag object. The function releases internal memory obtained for event flags handling. After this call the ef_id is no longer valid and cannot be used. The ef_id may be created again using the function osEventFlagsNew. This can cause starvation of threads that are waiting for flags of this event object.