RT-Thread 消息队列使用教程
在 RT-Thread 中,消息队列是一种常用的线程间通信机制。默认情况下,消息队列功能是关闭的,如果需要启用,可以在 rtconfig.h
文件中开启相应的宏定义:
#define RT_USING_MESSAGEQUEUE
动态创建消息队列及示例线程
1. 声明、创建消息队列及示例线程
首先,我们需要声明和创建一个消息队列,并创建用于发送和接收消息的线程。
struct rt_mq_t mq_create = RT_NULL;
rt_thread_t sendmsgThread, recvmsgThread;
2. 发送及接收函数说明
发送线程和接收线程的实现如下:
在这个示例中,发送线程每隔 500 毫秒发送一个消息,接收线程在无限循环中等待接收消息。
3. 编译烧写验证
编译代码并将其烧写到设备上,通过串口观察输出,验证消息队列的功能。
4. 发送执行时长大于接收超时时限,则会超时
如果发送消息的时间大于接收消息的超时时限,则接收线程会出现超时情况。可以通过修改接收函数中的超时时间来观察这种现象:
静态初始化消息队列及相关线程
除了动态创建消息队列和线程,还可以使用静态方式进行初始化和创建:
1. 声明静态消息队列和线程
struct rt_messagequeue mq_init;
rt_uint8_t msgpool[32*10];
rt_thread_t sendmsgThread1, recvmsgThread1;
static char sendmsgStatck[256];
static char recvmsgStatck[256];
2. 初始化消息队列和线程
在系统初始化阶段,静态初始化消息队列和创建线程:
3. 线程中的消息发送和接收
代码与动态创建的示例相同,发送线程和接收线程的实现保持不变。
4. 烧写验证
编译代码并将其烧写到设备上,通过串口观察输出,确认消息队列和线程之间的通信功能正常工作。
通过上述方法,我们成功地使用消息队列实现了线程之间的消息传递和同步通信【另一个线程间通信的方式是 邮箱】。希望这个教程对你的 RT-Thread 开发有所帮助。如果有任何问题或建议,欢迎在评论区留言。
对应的 demo 源码, 请点击 RtosExPro at rtt_communication_msgque
也可扫码关注博主同名公众号"不解之榬",回复 “RT-Thread” 获取