备注:经过评论区网友批评指正,协议栈没有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相关推荐

  1. 【Android 逆向】代码调试器开发 ( ptrace 函数 | 读寄存器 | 写寄存器 )

    文章目录 一.读寄存器 二.写寄存器 一.读寄存器 调用 ptrace(PTRACE_GETREGS, m_nPid, NULL, regs) 读取进程运行时的寄存器 ; 读取寄存器时 , 进程必须处 ...

  2. Tiva单片机——麦克风声音数据的储存/回放(Flash读/写)

    Tiva单片机--麦克风声音数据的储存/回放(Flash读/写) 一.整体介绍 1. 第一次设计 2. 第二次设计 3. 最终实现情况 二.代码的分段解读 1. 头函数 2. 宏定义 3. Flash ...

  3. 文本文件 java_简单的用java实现读/写文本文件的示例

    简单的用java实现读/写文本文件的示例 更新时间:2008年07月26日 13:09:26   作者: 同时也展示了如果从输入流中读出来内容写入输出流中(仅限文本流) 三个例子可以独立存在,所以根据 ...

  4. [DiscuzNt]整合DiscuzNt论坛目前所发现的小BUG及个人简单解决办法

    前段时间因为公司项目需要,需要在网站中整合BBS论坛,主要实现会员信息同步,经过目前市面上开源的BBS项目,最终认为还是DiscuzNt比较好,原因有以下几点: 1.符合国人习惯,DiscuzNt是由 ...

  5. modelsim仿真正确FPGA运行不正确的可能原因 - cm4写寄存器错

    困住整整一周了,工作进行不下去,中午偶遇导师,指导意见是有两种可能: 1.  FPGA编译器优化代码,可以考虑把综合过程中所有的warning排查一下 2.  verilog里有不可综合的语句. 又及 ...

  6. linux的内核有多小,Linux 内核有小bug?

    今天读着读着Linux代码,竟然无意中发现Linux 0.11内核有个小bug,呵呵,人非圣贤孰能无过. // 在目录项数据块中搜索匹配指定文件名的目录项,首先让de 指向数据块,并在不超过目录中目录 ...

  7. 请问:如何写出没有BUG的代码?

    全世界只有3.14 % 的人关注了 数据与算法之美 1947年9月9日,美国海军准将 Grace Hopper 在哈佛学院计算机实验室里使用 Mark II 和 Mark III 计算机进行研究工作. ...

  8. 一个关于fixed抖动的小bug

    前言 大家都知道position: fixed用于生成绝对定位的元素,相对于浏览器窗口进行定位. 元素的位置通过 "left", "top", "ri ...

  9. 试用VisualStudio2005Beta2出现的小BUG

    有一个小BUG,呵呵 也许是BETA版本的缘故吧,总之肯定问题多多 在建立完一个ASP.NET website后 随便写一点东西,这个站点不能start with Debug 运行 也就是说不能F5, ...

最新文章

  1. ASP.NET XML读取、增加、修改和删除操作
  2. HDU 2149.Public Sale-巴什博奕
  3. css命名规范和书写规范
  4. 计算机视觉工程师必读经典图书推荐
  5. Android Canvas 图形绘制
  6. LINUX下的tty,console与串口分析
  7. thinkPHP5.0数据查询表达式生成技巧
  8. 是时候扔掉 Postman 了,Apifox 真香!
  9. 一场价值4500亿的抉择
  10. Linux 2.6中基于Sysenter的系统调用机制
  11. iOS category解析
  12. 强大的ETL利器—DataFlow3.0
  13. 10部程序员必看的纪录片
  14. 显示风场的某一局部区域,实现多分辨率
  15. 网站Banner的代码
  16. std::numeric_limits的使用
  17. 2021年安徽省安全员C证考试资料及安徽省安全员C证证考试
  18. Flutter iOS问题记录 - Fastlane打包的ipa包上传fir后不显示应用版本名称
  19. 使用word进行图片的有序命名
  20. A Brief History of Humankind — 01 the cognitive revolution

热门文章

  1. SD卡打不开怎么办?sd卡损坏修复,盘点一些实用的教程
  2. 自考系列-4741计算机网络原理1
  3. 一个成年人有多少细胞
  4. C++ 深入浅出工厂模式(进阶篇)
  5. 一张图了解python 类方法与类变量 类变量与实例变量
  6. 洛谷2220 [HAOI2012]容易题
  7. java web基础视频教程_1、JavaWeb基础视频教程
  8. 考研复习之数据结构(六)栈和队列(下)(包含队列的相关内容、栈和队列的对比以及总结)
  9. Evaluate:huggingface评价指标模块入门详细介绍
  10. php处理mp3,在PHP中自动剪裁MP3