FreeRTOS 事件组
FreeRTOS 事件组
事件组实现了对多个任务的广播机制,可以用来做多任务的同步。
事件组、标志、位
一个事件标志是一个boolean类型的数,用来指示事件是否发生。这些标志组成了事件组。
事件的状态由事件组中每一位表示,数据类型是EventBits_t
如果某一位为1代表事件发生,0代表没发生
例如:若事件组的数值为0x92,则代表:
每一位的具体含义可以自己定义,事件组可以理解为一个标志位的集合。
EventBits_t
事件组可容纳的位数由宏定义设置
多任务访问
一个事件组可以被多个任务修改,也可以被多个任务读取。
API
事件组创建 xEventGroupCreate()
xEventGroupSetBits() 设置标志位
xEventGroupSetBitsFromISR() 中断中设置标志位、
其实并不是在中断中设置,而是将任务交给Daemon进程
xEventGroupWaitBits() 等待标志位
- uxBitsToWaitFor指定了哪一位需要等待
- xWaitForAllBits指定使用与还是或操作(OR/AND)
-
xClearOnExit为pdTRUE时,被uxBitsToWaitFor指定的位会置0,否则不会修改。函数返回值是清除前的状态
示例
结果
用事件组任务同步
API
xEventGroupSync()
示例
结果