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()

在这里插入图片描述

示例

在这里插入图片描述
在这里插入图片描述
结果
在这里插入图片描述

发布了85 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/lun55423/article/details/105736470
今日推荐