RTX5 | 消息队列02 - 放入与取出消息
生活随笔
收集整理的这篇文章主要介绍了
RTX5 | 消息队列02 - 放入与取出消息
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
文章目录
- 一、前言
- 二、实验目的
- 三、API
- 3.1、osMessageQueuePut
- 3.2、osMessageQueueGet
- 四、代码
- 4.1、main.h
- 4.2、main.c
- 五、DEBUG
- 5.1、长按按键KEY1,将变量放入消息队列
- 5.2、长按按键KEY2,从消息队列取出消息
一、前言
在RTOS里,消息队列与线程一样都是非常重要的功能。在实际项目上,线程与消息队列都肯定要使用。最常用的案例是串口中断回调函数将收到的字符放入消息队列,待串口中断回调函数结束后,线程立即从该消息队列里获取字符,接着按照通讯协议解释字符。
中断回调函数必须遵循快进快出的原则。所谓快进快出就是中断回调函数里的代码量需尽可能少,所以最好不要在中断回调函数里运行解释通讯协议的代码。此时,消息队列很好地解决了快进快出的问题。因为中断回调函数里只需运行将消息放入消息队列的代码,解析通讯协议的代码放在读取消息队列的线程里。
STM32工程:
链接:https://pan.baidu.com/s/1PbkeYj0yNU09-DcbMbC7bQ
提取码:ftgi
二、实验目的
长按KEY1按键,将变量put_Uart放入消息队列。长按KEY2按键,从消息队列取出消息。
三、API
3.1、osMessageQueuePut
/* 将put_Uart变量的值放入消息队列msgQueue_ID_CAN1 */ osMessageQueuePut(msgQueue_ID_CAN1, /* 消息队列的名字 */&put_Uart, /* 放入消息队列的变量(消息) */NULL, /* 放入消息的优先级 */NULL /* 超时时间为0,如果osMessageQueuePut被中断回调函数调用时,此参数必须是NULL */);3.2、osMessageQueueGet
/* 从消息队列msgQueue_ID_CAN1里取出消息 */ osMessageQueueGet(msgQueue_ID_CAN1, /* 消息队列的名字 */&get_Uart, /* 存放消息的内存 */NULL, /* 取出消息的优先级 */NULL /* 超时时间为0,在中断函数里调用osMessageQueueGet时,此参数必须是NULL */);四、代码
4.1、main.h
4.2、main.c
五、DEBUG
5.1、长按按键KEY1,将变量放入消息队列
5.2、长按按键KEY2,从消息队列取出消息
总结
以上是生活随笔为你收集整理的RTX5 | 消息队列02 - 放入与取出消息的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: RTX5 | 消息队列05 - 获取剩余
- 下一篇: 计算机网络课程设计之网络嗅探器的设计与实