freeModbus代码解读及移植笔记
1. FreeModbus协议分析协议必须首先调用初始化功能eMBinit()函数。后调用eMBEnable(),最后,在循环体或者单独一个任务中调用eMBPoll()函数。2. 应用层协议2.1
1. FreeModbus 协议分析 eMBinit()eMBEnable() 协议必须首先调用初始化功能函数。后调用,最后,在循环体或者 eMBPoll() 单独一个任务中调用函数。 2. 应用层协议 2.1. 系统的启动 .eMBInit() 函数的源码分析 RTU 以方式为例,首先,检查调用的地址是否合法。如不合法,返回错误。如果合法则继 续执行, RTUASCII 首先,针对方式还是方式,选择不同的编译模块。 对需要调用的函数指针进行复制。如果移植需要改变其他用途,则要修改相应的指针,包括 如下赋值: pvMBFrameStartCur =eMBRTUStart; pvMBFrameStopCur =eMBRTUStop; peMBFrameSendCur =eMBRTUSend; peMBFrameReceiveCur =eMBRTUReceive; pvMBFrameCloseCur =MB_PORT_HAS_CLOSE ?vMBPortClose :NULL; pxMBFrameCBByteReceived= xMBRTUReceiveFSM; pxMBFrameCBTransmitterEmpty =xMBRTUTransmitFSM; pxMBPortCBTimerExpired =xMBRTUTimerT35Expired; eStatus =eMBRTUInit( ucMBAddress, ucPort, ulBaudRate, eParity); 然后调用具体初始 化通讯端口。 .eMBRTUInit eMBRTUInit 这个函数主要干两件事: 第一,初始化串口: if( xMBPortSerialInit(ucPort, ulBaudRate, 8, eParity )!= TRUE ) { eStatus =MB_EPORTERR; } portserial.c 这个函数在中,需要用户在移植的时候根据自己的处理器编写。 3.5~5.0 第二,初始化计时器:首先要根据波特率计算一下是个字节周期的时间,然后再 xMBPortTimersInit( (USHORT )usTimerT35_50us) 调用,初始化计时器。这个函数在 porttimer.c 中,需要用户在移植的时候根据自己的处理器编写。

