目录结构
【demo】-各种平台的例程
【doc】-文档资料
【modbus】-核心源码
【tools】-相关工具
FreeModus的移植主要用到…\modbus目录和 …\demo\BARE目录下的内容
【modbus】文件夹直接导入到项目,基本不需要修改
【demo\BARE】文件夹下的demo.c是一个最基本的后台演示,主要实现协议栈的初始化、激活和运行,根据实际项目需求,实现对每个modbus功能码的处理逻辑。
port目录下是实现modbus协议栈的底层驱动支持
portevent.c 事件驱动
portserial.c 串口驱动
porttimer.c t3.5定时器驱动
其中portevent.c不用修改;portserial.c实现对应MCU下串口相关配置,包括端口初始化和中断配置,中断处理函数;porttimer.c 实现t3.5定时器初始化和相应的中断处理函数
协议栈内容主要参考解读mb.c,以RTU模式为例:
协议栈主要功能函数通过函数指针实现定义:
case MB_RTU:
pvMBFrameStartCur = eMBRTUStart; //开启串口接收中断,开启t3.5
pvMBFrameStopCur = eMBRTUStop; //关闭串口中断,关闭t3.5
peMBFrameSendCur = eMBRTUSend; //发送数据,激活串口发送状态机
peMBFrameReceiveCur = eMBRTUReceive; //处理接收事件
pvMBFrameCloseCur = MB_PORT_HAS_CLOSE ? vMBPortClose : NULL;
pxMBFrameCBByteReceived = xMBRTUReceiveFSM; //串口接收状态机
pxMBFrameCBTransmitterEmpty = xMBRTUTransmitFSM;//串口发送状态机
pxMBPortCBTimerExpired = xMBRTUTimerT35Expired; //t3.5超时处理
eStatus = eMBRTUInit( ucMBAddress, ucPort, ulBaudRate, eParity );
break;
freemodbus基本是通过状态机+事件机制的巧妙结合实现协议栈的稳定运行
协议栈主要运行流程
t3.5定时器在整个协议栈运行过程中扮演者重要的角色