FreeModbus 源码:点击下载

线圈BUG解决(后来发现不一定是BUG)
1、eMBException eMBFuncWriteCoil( UCHAR * pucFrame, USHORT * usLen )中的
    usRegAddress++;行注释掉,否则输出线圈0永远无法输出,其它的线圈错位。

2、eMBException eMBFuncWriteCoil( UCHAR * pucFrame, USHORT * usLen )中的写操作
   while循环改加入 usBitOffset += 8; 否则8以后的线圈无法进行写操作。
  while( iNCoils > 0 ){
          xMBUtilSetBits( ucRegCoilsBuf, usBitOffset,
                        ( uint8_t )( iNCoils > 8 ? 8 : iNCoils ),
          *pucRegBuffer++ );
          iNCoils -= 8;
          usBitOffset += 8;
          }         

3、细读后发现,usRegAddress++在每个操作下都有,有可能是原版就是有意这么写的,但这样
有违背MODBU协议,也有就是地址0的所有东西是没法操作到的,修改的版本中已可以操作0址
址。

4、合并User.c和rtu.c

 

这回把User.c和function.c合并了,同样的配置,Flash 下降,RAM反了长了点。
4 880 bytes of CODE memory (+             12 range fill )
   977 bytes of DATA memory (+ 14 absolute )

 

ModbusFun.c       整合FreeModbus的功能c代码文件;
ModbusRTU.c       Modbus的RTU模式桢处理,整理FreeModbus去除ASCII模式;
ModbusPort.c      关于硬件的移植包括串口、定时器、桢队列功能实现(目前是单桢处理);
                  (此文件是ATMEGA128硬件的代码,其它CPU需要自己移植)

#define MB_FUNC_HANDLERS_MAX                                    ( 16 )//使用的功能码数量
#define MB_FUNC_OTHER_REP_SLAVEID_BUF                   ( 8 )
#define MB_FUNC_OTHER_REP_SLAVEID_ENABLED          (  1 ) //报告从设备功能
#define MB_FUNC_READ_INPUT_ENABLED                         (  1 ) //读输入寄存器功能
#define MB_FUNC_READ_HOLDING_ENABLED                    (  1 ) //读保持寄存器功能
#define MB_FUNC_WRITE_HOLDING_ENABLED                   (  1 ) //写操持寄存存功能
#define MB_FUNC_WRITE_MULTIPLE_HOLDING_ENABLED  (  1 )//写多个操持寄存存功能
#define MB_FUNC_READ_COILS_ENABLED                         (  1 )//读线圈
#define MB_FUNC_WRITE_COIL_ENABLED                          (  1 )//写线圈
#define MB_FUNC_WRITE_MULTIPLE_COILS_ENABLED       (  1 )//写多个线圈
#define MB_FUNC_READ_DISCRETE_INPUTS_ENABLED      (  1 )//读离散输入
#define MB_FUNC_READWRITE_HOLDING_ENABLED          (  1 )//读写多个寄存器

 

测试环境:IAR for avr 5.40 & M128

8K Flash的单片机运行起来没有压力

随后将移植到其它平台有:

FreeModbus for STM32xx

FreeModbus for STM8xx

FreeModbus for LPCxx

FreeModbus for LMxx

FreeModbus for MSP430

FreeModbus Slave For AVR源代码 精简版2 【worldsing 笔记】的更多相关文章

  1. 使用Superprg 下载 AVR/51单片机固件 【worldsing笔记】

    progisp 2.0 可以下载avr.51等单片机,单击下载                      Superprg  单击下载 Superprg软件志峰公司出的专用软件,配合ZF_209使用, ...

  2. SQL Server 2000 绿色精简版gsql适用于xp/win7/win8/win10

    老的程序员肯定都用过sql2000数据库,我在2006-2010年之间,做的不少网站也都是sql2000数据库的,但是后来随着mysql的兴起,就逐渐不再使用sql数据库了.但是最近有个客户的网站要修 ...

  3. Linux上oracle精简版客户端快速部署

    RHEL6 + Oracle 11g客户端快速部署 需求:只是用到客户端的sqlplus, sqlldr功能. 方案:用精简版实现客户端的快速部署 1.上传oracle精简版客户端到服务器/tmp目录 ...

  4. ArcGIS10.2.1精简版、ArcGIS_Desktop10_Tutorial、破解文件等下载地址

    原版ArcGIS for Desktop的ISO文件一般都在4.5G以上,一般人用不上里面很多工具,下载回来又浪费时间,现推出ArcGIS10.2.1精简版(里面只包含主程序.Data Interop ...

  5. TeamViewer12.0.71503(远程控制软件)精简版 单文件企业版介绍

    TeamViewer 是一款能在任何防火墙和 NAT 代理的后台用于远程控制,桌面共享和文件传输的简单且快速的解决方案.为了连接到另一台计算机,只需要在两台计算机上同时运行 TeamViewer 即可 ...

  6. Log4j快速使用精简版

    Log4j快速使用精简版 1.导入log4j-1.2.17.jar包 2.在src根目录下创建log4j.properties文件 log4j.rootLogger=INFO, CONSOLE, FI ...

  7. VMware10.06精简版安装后台运行

    VMware10.06精简版安装时会出现一个安装功能选择菜单,里面有一条后台运行必选功能,一般人会跳过条.当你打算在服务器上用vmware时,一定要安装后台运行服务,否则你无法换出正在运行的后台虚拟机 ...

  8. [异常解决] ubuntu上安装虚拟机遇到的问题(vmware坑了,virtual-box简单安装,在virtual-box中安装精简版win7)

    利用周末时间将整个电脑格式化,换成了ubuntu系统- 所谓:扫清屋子再请客! 但是有些软件只在win上有,于是还是考虑装个虚拟机来个——逐步过度策略,一点点地从win上转移到linux上 我的系统是 ...

  9. 电脑公司最新GHOST WIN7系统32,64位优化精简版下载

    系统来自系统妈:http://www.xitongma.com 电脑公司最新GHOST win7系统32位优化精简版V2016年3月 系统概述 电脑公司ghost win7 x86(32位)万能装机版 ...

随机推荐

  1. Eclipse中通过Android模拟器调用OpenGL ES2.0函数操作步骤

    原文地址: Eclipse中通过Android模拟器调用OpenGL ES2.0函数操作步骤 - 网络资源是无限的 - 博客频道 - CSDN.NET http://blog.csdn.net/fen ...

  2. win7下VS.NET中通过LinqToSQL连接oracle数据库

    .NetFramework3.5提供了LinqToSQL组件,为我们访问数据库提供了方便.我用的是VS+Oracle开发工具.也想体验一下快捷方便的感觉. 1.连接Oracle数据库 在连接Oracl ...

  3. NFC(10)NDEF uri格式规范及读写示例(解析与封装ndef uri)

    只有遵守NDEF uri 格式规范的数据才能写到nfc标签上. NDEF uri 格式规范 uri 只有两部分: 第1个字节是uri协议映射值,如:0x01 表示uri以 http://www.开头. ...

  4. Linux下安装Wine运行windows程序

    资料 首页 https://www.winehq.org/ 安装 https://www.winehq.org/download/ 教程 https://www.winehq.org/document ...

  5. Java之Comparable接口和Comparator接口

    Comparable & Comparator 都是用来实现集合中元素的比较.排序的: Comparable 是在集合内部定义的方法实现的排序: Comparator 是在集合外部实现的排序: ...

  6. Samba 'smbcacls'命令安全绕过漏洞

    漏洞版本: Samba 4.x 漏洞描述: Bugtraq ID:66232 CVE ID:CVE-2013-6442 Samba是一款实现SMB协议.跨平台进行文件共享和打印共享服务的程序. 当使用 ...

  7. innodb force recovery

    innodb force recovery的6种设置: 1.innodb force recovery=1,即使发现了损坏页面也继续让服务器继续运行,这个选项对于备份或者转存当前数据尤为有用2.inn ...

  8. 不要62(HDU 2089数位dp入门)

    题意:统计区间 [a,b] 中不含 4 和 62 的数字有多少个. 分析:dp[i][f]数字表示不含 4 和 62的前提下,剩余长度为 len ,首位是否为 6 的个数. #include < ...

  9. 卸载sql server 2012

    好不容易装上了sql server 2012数据库,可是却不能连接本地的数据库,后来发现缺少一些服务,于是决定重新安装,但是卸载却很麻烦,如果卸载不干净的话,重新安装会出问题,所以下面就总结一些方法: ...

  10. java.lang.NoClassDefFoundError: javax/transaction/Synchronization (jUnit测试报错)

      测试hibernate   报错原因项目缺少包   在 hibernate 解压目录下找到 jta.jar 文件     往项目中添加该 jar 包,即可解决   添加方法:[右击项目]--> ...