firmware
IEM Firmware Documentation
|
Create a new event group.
Internally, within the FreeRTOS implementation, event groups use a [small] block of memory, in which the event group's structure is stored. If an event groups is created using xEventGroupCreate() then the required memory is automatically dynamically allocated inside the xEventGroupCreate() function. (see https://www.FreeRTOS.org/a00111.html). If an event group is created using xEventGroupCreateStatic() then the application writer must instead provide the memory that will get used by the event group. xEventGroupCreateStatic() therefore allows an event group to be created without using any dynamic memory allocation.
Although event groups are not related to ticks, for internal implementation reasons the number of bits available for use in an event group is dependent on the configTICK_TYPE_WIDTH_IN_BITS setting in FreeRTOSConfig.h. If configTICK_TYPE_WIDTH_IN_BITS is 0 then each event group contains 8 usable bits (bit 0 to bit 7). If configTICK_TYPE_WIDTH_IN_BITS is set to 1 then each event group has 24 usable bits (bit 0 to bit 23). If configTICK_TYPE_WIDTH_IN_BITS is set to 2 then each event group has 56 usable bits (bit 0 to bit 53). The EventBits_t type is used to store event bits within an event group.
The configUSE_EVENT_GROUPS configuration constant must be set to 1 for xEventGroupCreateStatic() to be available.
pxEventGroupBuffer | pxEventGroupBuffer must point to a variable of type StaticEventGroup_t, which will be then be used to hold the event group's data structures, removing the need for the memory to be allocated dynamically. |
Example usage:
[Potentially] block to wait for one or more bits to be set within a previously created event group.
This function cannot be called from an interrupt.
The configUSE_EVENT_GROUPS configuration constant must be set to 1 for xEventGroupWaitBits() to be available.
xEventGroup | The event group in which the bits are being tested. The event group must have previously been created using a call to xEventGroupCreate(). |
uxBitsToWaitFor | A bitwise value that indicates the bit or bits to test inside the event group. For example, to wait for bit 0 and/or bit 2 set uxBitsToWaitFor to 0x05. To wait for bits 0 and/or bit 1 and/or bit 2 set uxBitsToWaitFor to 0x07. Etc. |
xClearOnExit | If xClearOnExit is set to pdTRUE then any bits within uxBitsToWaitFor that are set within the event group will be cleared before xEventGroupWaitBits() returns if the wait condition was met (if the function returns for a reason other than a timeout). If xClearOnExit is set to pdFALSE then the bits set in the event group are not altered when the call to xEventGroupWaitBits() returns. |
xWaitForAllBits | If xWaitForAllBits is set to pdTRUE then xEventGroupWaitBits() will return when either all the bits in uxBitsToWaitFor are set or the specified block time expires. If xWaitForAllBits is set to pdFALSE then xEventGroupWaitBits() will return when any one of the bits set in uxBitsToWaitFor is set or the specified block time expires. The block time is specified by the xTicksToWait parameter. |
xTicksToWait | The maximum amount of time (specified in 'ticks') to wait for one/all (depending on the xWaitForAllBits value) of the bits specified by uxBitsToWaitFor to become set. A value of portMAX_DELAY can be used to block indefinitely (provided INCLUDE_vTaskSuspend is set to 1 in FreeRTOSConfig.h). |
Example usage: