事件组对应单个事件触发或多个事件同时触发的场景
创建事件组函数
EventGroupHandle_t xEventGroupCreate( void );
删除事件组函数
void vEventGroupDelete( EventGroupHandle_t xEventGroup )
设置事件
在任务中使用xEventGroupSetBits()
在中断中使用xEventGroupSetBitsFromISR()
等待事件
EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup,
const EventBits_t uxBitsToWaitFor,
const BaseType_t xClearOnExit,
const BaseType_t xWaitForAllBits,
TickType_t xTicksToWait );
参数如下(图片来自百问网)
下面分列出五种情况来快速了解使用方法
情况1
-1- 任务1设置事件组的第0位
-2- 任务2接收事件组的第0位
-3- 两个任务同一优先级基于时间片轮转 两个任务交替运行
情况2
-1- 任务1设置事件组的第0位
-2- 任务2接收事件组的第1位
-3- 任务2阻塞 只有任务1一直运行
情况3
-1- 任务1设置事件组的第0位
-2- 任务2接收事件组的第1或者第0位
-3- 两个任务同一优先级基于时间片轮转 两个任务交替运行
情况4
-1- 任务1设置事件组的第0位
-2- 任务2接收事件组的第1和0位
-3- 由于任务2只能接收到任务1 所以任务2阻塞
情况5
-1- 任务1设置事件组的第1和0位
-2- 任务2接收事件组的第1和0位
-3- 两个任务同一优先级基于时间片轮转 两个任务交替运行
工程获取
查看下方头像