一、概念:
事件标志位:用一个位,来表示事件是否发生。
事件标志组:是一组事件标志位的集合,可以当做一个整数。
特点:事件标志组的每一位表示一个事件(高八位不算),位置1表示事件发生,位置0表示事件未发生。任意任务和中断可以读写这些位。可以等待某一位成立,或者多个位成立。
一个事件组就包含了一个 EventBits_t 数据类型的变量,变量类型 EventBits_t 的定义如下所示:实际上是一个16位或者32位的无符号的数据类型,根据宏来决定。一般让宏置0,选择32位的无符号数据类型。
其中高8位用来存储事件标志组的控制信息,低24位用作存储事件标志位,所以一个事件标志组可以存储24个事件标志!
事件标志组,队列,信号量的区别:
二、事件标志组的API函数
1、动态创建事件标志组:
EventGroupHandle_t xEventGroupCreate(void);
2、静态创建事件标志位:
EventGroupHandle_t xEventGroupCreateStatic(StaticEventGroup_t * pxEventGroupBuffer);
3、删除事件标志位:
void vEventGroupDelete(EventGroupHandle_t xEventGroup);
4、等待事件标志位:
EventBits_t xEventGroupWaitBits(
EventGroupHandle_t xEventGroup,
const EventBits_t uxBitsToWaitFor,
const BaseType_t xClearOnExit,
const BaseType_t xWaitForAllBits,
TickType_t xTicksToWait)
5、设置事件标志位:
EventBits_t xEventGroupSetBits(
EventGroupHandle_t xEventGroup,
const EventBits_t uxBitsToSet)
中断中设置事件标志位:
BaseType_t xEventGroupSetBitsFromISR(
EventGroupHandle_t xEventGroup,
const EventBits_t uxBitsToSet,
BaseType_t * pxHigherPriorityTaskWoken)
6、清零事件标志位:
EventBits_t xEventGroupClearBits(
EventGroupHandle_t xEventGroup,
const EventBits_t uxBitsToClear)
中断中清零事件标志位:
BaseType_t xEventGroupClearBitsFromISR(
EventGroupHandle_t EventGroup,
const EventBits_t uxBitsToClear)
7、获取事件组中事件标志位的值:
EventBits_t xEventGroupGetBits(xEventGroup);
在中断中获取事件标志位:
EventBits_t xEventGroupGetBitsFromISR(EventGroupHandle_t xEventGroup);
8、同步事件:每个任务只有达到同步点,才能继续执行
EventBits_t xEventGroupSync(
EventGroupHandle_t xEventGroup,
const EventBits_t uxBitsToSet,
const EventBits_t uxBitsToWaitFor,
TickType_t xTicksToWait)