【RTOS】快速体验FreeRTOS所有常用API(6)事件组

本文详细介绍了FreeRTOS中的事件组功能,包括基本概念、创建方法、设置事件位和等待事件的API使用,以及在任务同步中的实际应用案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快速体验FreeRTOS所有常用API(1)工程创建
快速体验FreeRTOS所有常用API(2)任务管理
快速体验FreeRTOS所有常用API(3)同步与互斥
快速体验FreeRTOS所有常用API(4)队列
快速体验FreeRTOS所有常用API(5)信号量、互斥量
快速体验FreeRTOS所有常用API(6)事件组
快速体验FreeRTOS所有常用API(7)任务通知
快速体验FreeRTOS所有常用API(8)软件定时器
快速体验FreeRTOS所有常用API(9)中断管理
快速体验FreeRTOS所有常用API(10)资源管理
快速体验FreeRTOS所有常用API(11)打印空闲栈、CPU占用比

六、事件组

该部分在上份代码基础上修改得来,代码下载链接:

https://wwzr.lanzout.com/iihn01la39je

密码:dtr0

该代码尽量做到最简,不添加多余的、不规范的代码。

内容主要包括

  • 事件组的概念、创建、设置事件、等待事件。

最终实现效果:

  • 任务1去设置事件位0,任务2去设置事件位1,任务等待事件位 0 和 1 同时发生。效果:1、2先运行,运行完后3运行。

img

6.1 基本概念

当你在一个多任务系统中需要对多个事件进行同步、通信或控制时,FreeRTOS的事件组(Event Group)就变得非常有用。事件组允许任务等待多个事件中的任何组合,从而实现复杂的同步和通信操作。

应用场景

  • 复杂任务同步:当任务需要等待多个事件中的任何组合时,事件组非常有用。任务可以使用 xEventGroupWaitBits 等待多个事件位的组合,从而实现复杂的条件同步。

6.2 创建

使用 xEventGroupCreate 函数来创建一个事件组。

// 定义事件组句柄
static EventGroupHandle_t g_xEventGroupTest;

// 创建事件组
g_xEventGroupTest= xEventGroupCreate();

6.3 设置事件

设置事件位:

使用 xEventGroupSetBits 函数将指定的事件位设置为1。

/* 设置事件组: bit0 */
xEventGroupSetBits(g_xEventGroupTest, (1<<0));

这将设置事件组中对应的事件位。

6.4 等待事件

使用 xEventGroupWaitBits 函数等待指定的事件位被设置为1。

xEventGroupWaitBits(xEventGroup, xBitsToWaitFor, xClearOnExit, xWaitForAllBits, xTicksToWait);
/*
xEventGroup         事件组句柄
uxBitsToWaitFor     等待哪些位
xClearOnExit        等待完成后是否清除事件位 pdTRUE: 清除uxBitsToWaitFor指定的位 pdFALSE: 不清除
xWaitForAllBits     and还是or? pdTRUE: 等待的位,全部为1; pdFALSE: 等待的位,某一个为1即可
xTicksToWait        如果期待的事件未发生,阻塞多久。若为0,则立即返回;若为portMAX_DELAY,则无限等待。
*/

示例:

/* 等待事件:bit0 and bit1 */
xEventGroupWaitBits(g_xEventGroupTest, (1<<0)|(1<<1), pdTRUE, pdTRUE, portMAX_DELAY);

6.5 实例

创建

img

设置、等待

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值