事件标志组EventGroup
使用信号量来同步任务时只能与单个任务进行同步,而事件标志组可以在多个任务中进行同步,二者的区别从我的理解来说,就是信号量释放后只能读取一次,而事件标志组可以通过设置读取多次。
简介
- 事件位(事件标志位):事件位用来表示某个事件是否发生。
- 事件组:一个事件组就是一组的事件位,通过位编号来区分事件。事件标志组的数据类型为EventGroupHandle_t,当configUSE_16_BIT_TICKS为1时事件标志组可以存储8个事件位,为0时可以存储24个事件位。
创建事件标志组
函数 | 描述 |
---|
EventGroupHandle_t xEventGroupCreate(void) | 动态创建事件标志组函数 |
EventGroupHandle_t xEventGroupCreate(StaticEventGroup_t * pxEventGroupBuffer) | 静态创建事件标志组函数 |
设置事件位
函数 | 描述 |
---|
EventBits_t xEventGroupClearBits(EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToClear) | 任务级设置事件位为0函数 |
BaseType_t xEventGroupClearBitsFromISR(EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToClear) | 中断级设置事件位为0函数 |
EventBits_t xEventGroupSetBits(EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToSet) | 任务级设置事件位为1函数 |
BaseType_t xEventGroupSetBitsFromISR(EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToSet,BaseType_t *pxHigherPriorityTaskWoken) | 中断级设置事件位为1函数 |
获取事件标志组
函数 | 描述 |
---|
EventBits_t xEventGroupGetBits(EventGroupHandle_t xEventGroup) | 任务级获取事件标志组函数 |
EventBits_t xEventGroupGetBitsFromISR(EventGroupHandle_t xEventGroup) | 中断级获取事件标志组函数 |
EventBits_t xEventGroupWaitBits(…) | 阻塞式等待指定事件位 |
EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup,
const EventBits_t uxBitsToWaitFor,
const BaseType_t xClearOnExit,
const BaseType_t xWaitForAllBits,
const TickType_t xTicksToWait );
Parameter | Description |
---|
xEventGroup | 事件标志组 |
uxBitsToWaitFor | 指定等待的事件位,比如等待bit0和bit2,则参数为0x05 |
xClearOnExit | 为pdTRUE则退出此函数会清除参数uxBitsToWaitFor指定的事件位,为pdFALSE则不会改变该事件位 |
xWaitForAllBits | 为pdTRUE时则只有在参数uxBitsToWaitFor都为1或者阻塞时间到函数才会返回,为pdFALSE则uxBitsToWaitFor事件位中任何一位为1都返回 |
xTickToWait | 阻塞时间,单位为节拍数 |