RT-Thread 体验教程:5.事件集!RT-Thread线程同步的另一环

RT-Thread 事件集使用教程

在 RT-Thread 中,事件集是一种灵活的线程同步机制,可以实现线程间的一对多或多对多通信。默认情况下,事件集功能是关闭的,如果需要使用事件集,则需要在 rtconfig.h 文件中启用相应的宏定义:

#define RT_USING_EVENT

image.png

事件集通过一个32位的无符号整型表示,每个事件集包含32个事件。下面通过一个简单的例子来展示如何使用事件集。

示例场景

假设有如下需求:

  1. 只有当除数和被除数都准备好后,才进行除法运算(除数/被除数)。
  2. 当除数或被除数任一准备好时,输出调试信息表明其已准备好。
动态创建事件集和线程
1. 声明事件集及线程控制块指针
struct rt_event_t div_event_create = RT_NLL;
rt_thread_t randDividerThread, randDividendThread, DivisionThread;

image.png

2. 创建事件集及相关线程

image.png

3. 示例函数实现及解释

image.png

4. 烧写验证

编译代码并将其烧写到设备上,通过串口观察输出,验证事件集的功能。
image.png

静态初始化事件集和线程

除了动态创建事件集和线程,还可以使用静态方式进行初始化和创建:

1. 声明静态事件集
struct rt_event div_event_init;
2. 初始化事件集及线程

在系统初始化阶段,静态初始化事件集和创建线程:
image.png

3. 线程中的事件集发送和接收

代码与动态创建的示例相同,线程函数 div_thread_entrynum1_thread_entrynum2_thread_entry 的实现保持不变。
image.png

4. 执行验证结果

编译代码并将其烧写到设备上,通过串口观察输出,确认事件集和线程之间的同步功能正常工作。
image.png

通过上述方法,我们成功地使用事件集实现了线程之间的同步通信。希望这个教程对你的 RT-Thread 开发有所帮助。如果有任何问题或建议,欢迎在评论区留言。

对应的 demo 源码, 请点击 RtosExPro at rtt_sync_event

也可扫码关注博主同名公众号"不解之榬",回复 “RT-Thread” 获取
不解之榬

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值