事件标志组用于任务间通信或同步
事件标志组和全局变量
- 全局变量一般用在无RTOS的程序中,因此程序对全局变量的访问是顺序的,全局变量对于每一个访问它的程序来说都是最新值
- 事件标志组一般用在多任务系统中,多任务使用事件标志组可以防止访问冲突。因为多任务相当于并行执行,访问全局变量可能会出现同时访问一个值的情况,会出现访问冲突或变量不是最新值
- 事件标志组在多任务中可以进行超时等待
事件标志组本质上是一个16位或32位的软件状态寄存器。16位的话使用低8位,32位的话使用低24位,每位用0或1表示事件标志。
事件标志组API | 功能 |
---|---|
EventGroupHandle_t xEventGroupCreate( void ) | 创建事件标志组,返回句柄 |
EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet ) | 设置标志位,返回事件标志组 |
BaseType_t xEventGroupSetBitsFromISR(EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet,BaseType_t *pxHigherPriorityTaskWoken ) | 设置标志位(中断),返回状态 |
EventBits_t xEventGroupWaitBits(EventGroupHandle_t xEventGroup,EventBits_t uxBitsToWaitFor,BaseType_t xClearOnExit,BaseType_t xWaitForAllBits,TickType_t xTicksToWait ) | 等待事件标志位置位,返回事件标志组 |
/* 创建事件标志组 */
xCreatedEventGroup = xEventGroupCreate();
/* 设置事件标志组的 bit0 */
xEventGroupSetBits(xCreatedEventGroup, BIT_0);
/* 设置事件标志组的 bit1 */
xEventGroupSetBits(xCreatedEventGroup, BIT_1);
/*等待标志位置位*/
uxBits = xEventGroupWaitBits(xCreatedEventGroup, /* 事件标志组句柄 */
BIT_ALL, /* 等待 bit0 和 bit1 被设置 */
pdTRUE,/* 退出前 bit0 和 bit1 被清除,这里是 bit0 和 bit1 都被设置才表示“退出”*/
pdTRUE,/* 设置为pdTRUE表示等待bit1和bit0都被设置*/
xTicksToWait);/* 等待延迟时间 */