【RT-Thread 体验教程:7.RT-Thread的消息队列,重磅登场!】

RT-Thread 消息队列使用教程

在 RT-Thread 中,消息队列是一种常用的线程间通信机制。默认情况下,消息队列功能是关闭的,如果需要启用,可以在 rtconfig.h 文件中开启相应的宏定义:

#define RT_USING_MESSAGEQUEUE

image.png

动态创建消息队列及示例线程
1. 声明、创建消息队列及示例线程

首先,我们需要声明和创建一个消息队列,并创建用于发送和接收消息的线程。

struct rt_mq_t mq_create = RT_NULL;
rt_thread_t sendmsgThread, recvmsgThread;

image.png

2. 发送及接收函数说明

发送线程和接收线程的实现如下:
image.png
在这个示例中,发送线程每隔 500 毫秒发送一个消息,接收线程在无限循环中等待接收消息。

3. 编译烧写验证

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

4. 发送执行时长大于接收超时时限,则会超时

如果发送消息的时间大于接收消息的超时时限,则接收线程会出现超时情况。可以通过修改接收函数中的超时时间来观察这种现象:
image.png

静态初始化消息队列及相关线程

除了动态创建消息队列和线程,还可以使用静态方式进行初始化和创建:

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. 初始化消息队列和线程

在系统初始化阶段,静态初始化消息队列和创建线程:
image.png

3. 线程中的消息发送和接收

代码与动态创建的示例相同,发送线程和接收线程的实现保持不变。

4. 烧写验证

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

通过上述方法,我们成功地使用消息队列实现了线程之间的消息传递和同步通信【另一个线程间通信的方式是 邮箱】。希望这个教程对你的 RT-Thread 开发有所帮助。如果有任何问题或建议,欢迎在评论区留言。

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值