FreeModbus--完全分析--系列1
来源:互联网 发布:陌陌八格切图软件 编辑:程序博客网 时间:2024/05/17 21:59
说明:freemodbus-v1.5.0
主流程
/* ----------------------- Start implementation -----------------------------*/intmain( void ){ eMBErrorCode eStatus; eStatus = eMBInit( MB_RTU, 0x0A, 0, 38400, MB_PAR_EVEN ); /* Enable the Modbus Protocol Stack. */ eStatus = eMBEnable( ); for( ;; ) { ( void )eMBPoll( ); /* Here we simply count the number of poll cycles. */ usRegInputBuf[0]++; }}
由上述主函数可知协议栈经eMBInit和eMBEnable初始化、使能后进入协议栈的循环eMBPoll中。
eMBInit分析
首先,使用eMBInit初始化协议栈,根据你使用的参数eMBMode eMode初始化相应的函数入口!
#if MB_RTU_ENABLED > 0 case MB_RTU: 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 ); break;#endif#if MB_ASCII_ENABLED > 0 case MB_ASCII: pvMBFrameStartCur = eMBASCIIStart; pvMBFrameStopCur = eMBASCIIStop; peMBFrameSendCur = eMBASCIISend; peMBFrameReceiveCur = eMBASCIIReceive; pvMBFrameCloseCur = MB_PORT_HAS_CLOSE ? vMBPortClose : NULL; pxMBFrameCBByteReceived = xMBASCIIReceiveFSM; pxMBFrameCBTransmitterEmpty = xMBASCIITransmitFSM; pxMBPortCBTimerExpired = xMBASCIITimerT1SExpired; eStatus = eMBASCIIInit( ucMBAddress, ucPort, ulBaudRate, eParity ); break;#endif
以上代码中pvMBFrameStartCur、pvMBFrameStopCur等即协议栈函数的接口,对于不同模式使用不同的函数进行赋值初始化!!此编写模式可以借鉴学习!!
其中eMBRTUInit函数对底层驱动(串口和定时器)进行了初始化。
在上述初始化完成并且成功后对事件功能也进了初始化,最后全局变量eMBState = STATE_DISABLED。
eMBEnable的分析
eMBErrorCodeeMBEnable( void ){ eMBErrorCode eStatus = MB_ENOERR; if( eMBState == STATE_DISABLED ) { /* Activate the protocol stack. */ pvMBFrameStartCur( ); eMBState = STATE_ENABLED; } else { eStatus = MB_EILLSTATE; } return eStatus;}
由第一节的分析,此时将启动协议栈pvMBFrameStartCur,查看程序该函数指针被分配到为eMBRTUStart。
该函数中将全局变量eRcvState = STATE_RX_INIT,并使能串口和定时器,注意此时的定时开始工作!!!
全局变量eMBState =STATE_ENABLED。
- FreeModbus--完全分析--系列1
- FreeModbus--完全分析--系列2
- FreeModbus--完全分析--系列3
- FreeModbus源码分析
- FreeModbus源码分析
- FreeModbus源码分析
- FreeModbus源码分析
- FreeModbus启动流程分析
- Freemodbus原理分析
- [FreeModbus源码分析] 总目录
- freemodbus-v1.5.0 源码分析
- Freemodbus文档1:模块
- FreeModBus解析1
- freemodbus
- Ogre 分析系列完全篇
- Ogre 分析系列完全篇
- Ogre 分析系列完全篇
- Ogre 分析系列完全篇
- OpenSSL命令---rsa
- java读写property文件
- android Jni NDK开发环境搭建及其简单实例的编写
- 内存管理、内存分配malloc、free、realloc,printf小结
- A*算法解决八数码问题
- FreeModbus--完全分析--系列1
- poj 3146 Interesting Yang Hui Triangle(lucas定理的应用)
- java学习之路-----设计模式---工厂模式
- FastJson关于java的使用
- Android 在开发环境中已更换图片 但运行结果的图片仍为旧图片
- jQuery中的this与$(this)
- android service 的简单实例 binder service
- ARM流水线(pipeline)
- Android ListView onScroll NullPointerException ListView滚动崩溃