5 rtthread消息队列一对多的情况

发布于 2020-11-24 17:03:30

最近再弄一个rtthread的工程项目,其中需要用一个消息队列,这个消息队列从线程A中发送出来,然后在线程B,C中阻塞等待消息,然后在调试之后发现了总线错误,总线错误定位是在消息队列的接收函数,等待阻塞的语句。自己估计可能是两个线程同时同时等待一个消息队列导致的内存读取错误,请求有经验的大哥解答

下面贴个寄存器信息:1606206654.jpg

查看更多

关注者
1
被浏览
420
我夏了夏天
我夏了夏天 认证专家 2020-11-26

我看你的代码有两个方面比较可疑:

  1. 相当多线程的栈设置的非常小,而且 lift tick 数值又非常大,很容易让人怀疑为栈溢出造成的异常现象,推荐楼主仔细检查 Tflusamp 线程的栈是否够用,加大该线程的栈后再尝试运行。
  2. 贴出出错时的代码让大家看一下,仔细检查一下系统 fault 之前 memcpy 的源地址和目标地址是否是四字节对齐的,如果发生栈溢出,导致 memcpy 的源地址和目标地址被修改,那么会导致非对齐访问的 hardfault。
4 个回答
yangjie
yangjie 2020-11-24

"自己估计可能是两个线程同时同时等待一个消息队列导致的内存读取错误"
多线程读数据,数据不会有问题的。
消息队列是一对一的,消息1若被B线程接收,C线程将接收不到消息1。

SIO_Lin
SIO_Lin 2020-11-25

调式之后定位是在rt_mq_recv,里面的memcpy里面报的错,不知道是为什么

nongxiaoming
nongxiaoming 2020-11-26

一般一对多要自己做个分发机制,系统的消息队列是一对一的,这样应用没法控制消息给的谁,也容易出现问题。

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览