FreeModbus读/写寄存器小Bug
备注:经过评论区网友批评指正,协议栈没有Bug。这里只是一种临时解决问题的思路,可能带来其他问题,请各位朋友谨慎使用。
在STM32F401中移植了FreeModBus,移植教程参考了这里:http://www.openedv.com/thread-64794-1-1.html。采用03、04和06号功能码进行数据读写,发现数据能读出,但数值不对。单独调试串口证明串口正常。断点调试发现,每次读/写都是操作的本来想操作寄存器的下一个。于是,一步步查看协议栈各函数调用关系。终于发现,协议栈的小bug。
以03号功能码调用的函数eMBException eMBFuncReadInputRegister( UCHAR * pucFrame, USHORT * usLen )为例(在mbfuncinput.c中),有如下代码:
if( *usLen == ( MB_PDU_FUNC_READ_SIZE + MB_PDU_SIZE_MIN ) ){usRegAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_ADDR_OFF] << 8 );usRegAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_READ_ADDR_OFF + 1] );usRegAddress++; usRegCount = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_REGCNT_OFF] << 8 );usRegCount |= ( USHORT )( pucFrame[MB_PDU_FUNC_READ_REGCNT_OFF + 1] );
可以看到,在获取寄存器地址usRegAddress后,进行了++操作,把这句话屏蔽即可。同理,在其他几个函数eMBFunc…中,进行同样处理。这些Function分布在文件名为mbfunc**.c的文件中,搜索++字符,并确定是寄存器地址后,将该行屏蔽即可。
FreeModbus读/写寄存器小Bug相关推荐
- 【Android 逆向】代码调试器开发 ( ptrace 函数 | 读寄存器 | 写寄存器 )
文章目录 一.读寄存器 二.写寄存器 一.读寄存器 调用 ptrace(PTRACE_GETREGS, m_nPid, NULL, regs) 读取进程运行时的寄存器 ; 读取寄存器时 , 进程必须处 ...
- Tiva单片机——麦克风声音数据的储存/回放(Flash读/写)
Tiva单片机--麦克风声音数据的储存/回放(Flash读/写) 一.整体介绍 1. 第一次设计 2. 第二次设计 3. 最终实现情况 二.代码的分段解读 1. 头函数 2. 宏定义 3. Flash ...
- 文本文件 java_简单的用java实现读/写文本文件的示例
简单的用java实现读/写文本文件的示例 更新时间:2008年07月26日 13:09:26 作者: 同时也展示了如果从输入流中读出来内容写入输出流中(仅限文本流) 三个例子可以独立存在,所以根据 ...
- [DiscuzNt]整合DiscuzNt论坛目前所发现的小BUG及个人简单解决办法
前段时间因为公司项目需要,需要在网站中整合BBS论坛,主要实现会员信息同步,经过目前市面上开源的BBS项目,最终认为还是DiscuzNt比较好,原因有以下几点: 1.符合国人习惯,DiscuzNt是由 ...
- modelsim仿真正确FPGA运行不正确的可能原因 - cm4写寄存器错
困住整整一周了,工作进行不下去,中午偶遇导师,指导意见是有两种可能: 1. FPGA编译器优化代码,可以考虑把综合过程中所有的warning排查一下 2. verilog里有不可综合的语句. 又及 ...
- linux的内核有多小,Linux 内核有小bug?
今天读着读着Linux代码,竟然无意中发现Linux 0.11内核有个小bug,呵呵,人非圣贤孰能无过. // 在目录项数据块中搜索匹配指定文件名的目录项,首先让de 指向数据块,并在不超过目录中目录 ...
- 请问:如何写出没有BUG的代码?
全世界只有3.14 % 的人关注了 数据与算法之美 1947年9月9日,美国海军准将 Grace Hopper 在哈佛学院计算机实验室里使用 Mark II 和 Mark III 计算机进行研究工作. ...
- 一个关于fixed抖动的小bug
前言 大家都知道position: fixed用于生成绝对定位的元素,相对于浏览器窗口进行定位. 元素的位置通过 "left", "top", "ri ...
- 试用VisualStudio2005Beta2出现的小BUG
有一个小BUG,呵呵 也许是BETA版本的缘故吧,总之肯定问题多多 在建立完一个ASP.NET website后 随便写一点东西,这个站点不能start with Debug 运行 也就是说不能F5, ...
最新文章
- ASP.NET XML读取、增加、修改和删除操作
- HDU 2149.Public Sale-巴什博奕
- css命名规范和书写规范
- 计算机视觉工程师必读经典图书推荐
- Android Canvas 图形绘制
- LINUX下的tty,console与串口分析
- thinkPHP5.0数据查询表达式生成技巧
- 是时候扔掉 Postman 了,Apifox 真香!
- 一场价值4500亿的抉择
- Linux 2.6中基于Sysenter的系统调用机制
- iOS category解析
- 强大的ETL利器—DataFlow3.0
- 10部程序员必看的纪录片
- 显示风场的某一局部区域,实现多分辨率
- 网站Banner的代码
- std::numeric_limits的使用
- 2021年安徽省安全员C证考试资料及安徽省安全员C证证考试
- Flutter iOS问题记录 - Fastlane打包的ipa包上传fir后不显示应用版本名称
- 使用word进行图片的有序命名
- A Brief History of Humankind — 01 the cognitive revolution