RT-Thread 事件集使用教程
在 RT-Thread 中,事件集是一种灵活的线程同步机制,可以实现线程间的一对多或多对多通信。默认情况下,事件集功能是关闭的,如果需要使用事件集,则需要在 rtconfig.h
文件中启用相应的宏定义:
#define RT_USING_EVENT
事件集通过一个32位的无符号整型表示,每个事件集包含32个事件。下面通过一个简单的例子来展示如何使用事件集。
示例场景
假设有如下需求:
- 只有当除数和被除数都准备好后,才进行除法运算(除数/被除数)。
- 当除数或被除数任一准备好时,输出调试信息表明其已准备好。
动态创建事件集和线程
1. 声明事件集及线程控制块指针
struct rt_event_t div_event_create = RT_NLL;
rt_thread_t randDividerThread, randDividendThread, DivisionThread;
2. 创建事件集及相关线程
3. 示例函数实现及解释
4. 烧写验证
编译代码并将其烧写到设备上,通过串口观察输出,验证事件集的功能。
静态初始化事件集和线程
除了动态创建事件集和线程,还可以使用静态方式进行初始化和创建:
1. 声明静态事件集
struct rt_event div_event_init;
2. 初始化事件集及线程
在系统初始化阶段,静态初始化事件集和创建线程:
3. 线程中的事件集发送和接收
代码与动态创建的示例相同,线程函数 div_thread_entry
、num1_thread_entry
和 num2_thread_entry
的实现保持不变。
4. 执行验证结果
编译代码并将其烧写到设备上,通过串口观察输出,确认事件集和线程之间的同步功能正常工作。
通过上述方法,我们成功地使用事件集实现了线程之间的同步通信。希望这个教程对你的 RT-Thread 开发有所帮助。如果有任何问题或建议,欢迎在评论区留言。
对应的 demo 源码, 请点击 RtosExPro at rtt_sync_event
也可扫码关注博主同名公众号"不解之榬",回复 “RT-Thread” 获取