OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 140|回复: 4

FreeModbus+FreeRTOS消息队列接收数据异常

[复制链接]

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2018-11-28
在线时间
37 小时
发表于 2025-2-13 14:23:46 | 显示全部楼层 |阅读模式
本帖最后由 歪歪点子 于 2025-2-13 21:59 编辑

创建了三个高中低优先级任务,当高优先级的任务通过xQueueSend函数发送结构体类型消息给中优先级队列阻塞任务,当中优先级任务使用消息队列传递过来的数据时,通过FreeModbus串口发送出去的数据不正常。正常的数据是:01 10 00 E8 02 00 04 00 00 00 00 ,但是发送出去的数据是:01 10 00 E8 02 00 04 00 00 A2 20,很奇怪!!
做了如下测试:
1,在中优先级任务中直接赋值局部或全局变量的形式,FreeModbus串口发送正常。
2,使用消息队列传递的数据FreeModbus串口发送就不正常。
尝试的解决办法:
1、怀疑是堆栈设置小了。调整变大没有用;
2、结构体对齐问题。通过#pragma pack(1)调用取消字节对齐也没有用;
有哪位大佬遇见这样的BUG。求解???


sources.zip

12.85 MB, 下载次数: 5

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13041
金钱
13041
注册时间
2012-11-26
在线时间
3805 小时
发表于 2025-2-13 16:41:26 | 显示全部楼层
不正常是怎么不正常,你这样问问题,没人想回答的
回复 支持 反对

使用道具 举报

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2018-11-28
在线时间
37 小时
 楼主| 发表于 2025-2-13 21:57:41 | 显示全部楼层
jermy_z 发表于 2025-2-13 16:41
不正常是怎么不正常,你这样问问题,没人想回答的

创建了三个高中低优先级任务,当高优先级的任务通过xQueueSend函数发送结构体类型消息给中优先级队列阻塞任务,当中优先级任务使用消息队列传递过来的数据时,通过FreeModbus串口发送出去的数据不正常。正常的数据是:01 10 00 E8 02 00 04 00 00 00 00 ,但是发送出去的数据是:01 10 00 E8 02 00 04 00 00 A2 20,很奇怪!!
回复 支持 反对

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13041
金钱
13041
注册时间
2012-11-26
在线时间
3805 小时
发表于 2025-2-14 10:40:52 | 显示全部楼层
歪歪点子 发表于 2025-2-13 21:57
创建了三个高中低优先级任务,当高优先级的任务通过xQueueSend函数发送结构体类型消息给中优先级队列阻塞 ...

最后两位是CRC吧,正常的modbus后面两位是CRC,再怎么也不会是00 00,你自己再研究研究吧
学无止境
回复 支持 反对

使用道具 举报

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2018-11-28
在线时间
37 小时
 楼主| 发表于 2025-2-22 13:14:11 | 显示全部楼层
jermy_z 发表于 2025-2-14 10:40
最后两位是CRC吧,正常的modbus后面两位是CRC,再怎么也不会是00 00,你自己再研究研究吧

谢谢回答!!找到问题了。是调用10功能码函数时,寄存器数量参数与写入缓存区大小不匹配导致取值时取到的是下一个栈地址的内容
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-3-14 14:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表