Polarbear
Polarbear
This guy hasn't written anything yet

注册于 1 year ago

回答
7
文章
0
关注者
0

楼主有出现过因为

if (net_read(c, c->readbuf, 1, 0) != 1)
    goto exit;

执行了

LOG_D("net_read %d:%d, break!", bytes, len);

导致出现的掉线重连的情况吗?

是不是几乎每次机器上电连上之后然后出现这个掉线了,然后又连上

/ 从消息队列中读取消息/
result = rt_mq_recv(&rx_mq, &msg, sizeof(msg), RT_WAITING_FOREVER);

/ 从串口读取数据/
rx_length = rt_device_read(msg.dev, 0, rx_buffer, msg.size);

参考链接文档:https://www.rt-thread.org/document/site/programming-manual/device/uart/uart/

楼主我好像遇到跟你一样的问题了,但是我看出错之前的free都是占用挺少的

老哥,我尝试了去屏蔽这两行dma_isr(&uart->serial)了,为什么还是会出现粘包跟包被拆了的情况。现在整个人头都大了=。=。下面的链接是我的疑惑,求助各路大神。
https://club.rt-thread.org/ask/question/429206.html

错误情况补充

  • 1.有时候接收中断给的消息大小会是只有几个字节,但是消息长度一般都是固定的
  • 2.还有一种情况就是第一个消息是【28Byte(第一个数据包完整的)+1Byte(第二个数据包的第一个字节)】,第二个数据包是【27Byte+28Byte(第三个完整的数据包)】。这样就会废掉三个数据包。
  • 3.每次触发了串口中断接收回调的时候发的第一个消息的msg.size都是1个字节的,每一个包的第一个字节很大概率会被拆掉一样。所以才做了超时判断去组装剩下的27Byte数据.

观察情况补充

  • 1.使用逻辑分析仪发现每个数据包的第一个字节跟后面的字节相隔大概35~40us。

期望结果

  • 1.每次触发了中断接收回调函数的时候希望msg.size是准确的,不要被拆包了。

我才用多个节点的时候会不断地报出这个信息,导致mqtt一直发送,是怎么回事?[D/mqtt] net_read 0:1, break!

回到
顶部

发布
问题

投诉
建议