• FreeModbus Slave For AVR源代码 精简版2 【worldsing 笔记】


    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

  • 相关阅读:
    例20:希尔排序
    例19:直接插入排序
    例14:计算某日是该年的第几天
    为自己
    hdoj--1027--Ignatius and the Princess II(dfs)
    UESTC--758--P酱的冒险旅途(模拟)
    nyoj--990--蚂蚁感冒(模拟)(思维题)
    历届试题 邮局(dfs+剪枝)
    历届试题 数字游戏
    历届试题 回文数字
  • 原文地址:https://www.cnblogs.com/worldsing/p/3264239.html
Copyright © 2020-2023  润新知