FreeRTOS之事件标志组

事件标志组用于任务间通信或同步

事件标志组和全局变量

  • 全局变量一般用在无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);/* 等待延迟时间 */

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值