消息队列传输不定长数据

发布于 2020-11-04 10:20:53

应用环境:使用stm32l475的串口中断接收不定长数据,在中断接收完成后(结束符)将数据发送给消息队列,在串口处理线程中读取消息队列。
问题1:如何接收不定长的数据呢?看了文档的《消息队列的使用场合》image.png
说是与邮箱大不相同,但是这样看还是传递的缓存数组的地址呀,还是需要在线程中再清空缓存吧?
问题2:如何清空消息队列内容,打算在发送消息队列前先清空一下,保证每次线程收到的都是实时的最新一组数据,否则可能会有这次读的消息队列实际是上一帧数据。

查看更多

关注者
0
被浏览
441
2 个回答
sync
sync 2020-11-04

这里有串口接收不定长数据的例子,楼主参考下
https://www.rt-thread.org/document/site/programming-manual/device/uart/uart/

没发现有专门的清空消息队列的函数,不过可以间接用rt_mb_recv 判断,接受不到数据不就说明队列清空了吗?

MIUZ_3615
MIUZ_3615 2020-11-05

你可以开启串口的空闲中断,在空闲中断里面发送数据,将数据的第一个字节设置为本次发送数据的长度。清消息队列我也没有发现有相关接口,不过你可以在rt_mq_recv函数里面找到拷贝数据的地方,当数据拷贝完成以后你追加一个清空缓存的函数就行了。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览