RTX5 | 消息队列01 - 创建消息队列

一、前言

在RTOS里,消息队列与线程一样都是非常重要的功能。在实际项目上,线程与消息队列肯定会使用。最常用的案例是串口中断回调函数将收到的字符放入消息队列,待串口中断回调函数结束后,线程立即从该消息队列里获取字符,接着按照通讯协议解释字符。
在这里插入图片描述
中断回调函数必须遵循快进快出的原则。所谓快进快出就是中断回调函数里的代码量需尽可能少,所以最好不要在中断回调函数里运行解释通讯协议的代码。此时,消息队列很好地解决了快进快出的问题。因为中断回调函数里只需运行将消息放入消息队列的代码,解析通讯协议的代码放在读取消息队列的线程里。

STM32工程:
链接:https://pan.baidu.com/s/1F7AXUObbZzQ7Dq0pJjM9oA
提取码:5dzr

二、实验的目的

创建一个消息队列。

三、API

3.1、osMessageQueueId_t

osMessageQueueId_t msgQueue_ID_CAN1;   //用于CAN1的消息队列ID

在这里插入图片描述

3.2、osMessageQueueAttr_t

/* 动态堆栈方式 */
/* CAN1消息队列属性 */
const osMessageQueueAttr_t msgQueue_CAN1_Attr =
{
	.name = "Message_Queue_CAN1",  /* 消息队列名字 */
								   /* 其他都用默认 */
};

在这里插入图片描述

3.3、osMessageQueueNew

msgQueue_ID_CAN1   = osMessageQueueNew(MQ_SIZE,             /* 消息队列里存放消息的总数 */
									   sizeof(put_Uart),    /* 消息的大小(单位: Byte)*/
									   &msgQueue_CAN1_Attr  /* 消息队列的属性 */
									   );

在这里插入图片描述

四、代码

4.1、main.h

在这里插入图片描述

4.2、main.c

在这里插入图片描述
使用动态堆栈的方式创建消息队列,只需从属性里配置消息队列的名字,其他均为默认值即可。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、RTX RTOS调试程序

Keil提供的RTX RTOS功能,非常方便地调试RTX5程序。从下图看到,成功创建第一个消息队列。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wallace Zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值