微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > freeModbus代码解读及移植笔记

freeModbus代码解读及移植笔记

时间:11-30 来源:互联网 点击:

IVED过程中最后一步,如果此帧的地址符合本机地址,则发出EV_EXECUTE事件,进行应用层的处理。

20、在eMBRTUReceive函数中首先查看帧大小是否符合要求,然后进行CRC校验。此函数的原型是:

eMBRTUReceive( UCHAR * pucRcvAddress, UCHAR ** pucFrame, USHORT * pusLength )

第一个参数是为了返回帧中的地址,也就是帧中第一个字节;第二个传入的参数以后要当做数组来使用,所以用了指针的指针类型;第三个参数表示PDU的长度,也就是帧中除去地址字节和CRC校验字节后的长度。

21、在eMBPoll( )中处理EV_EXECUTE事件,首先从PDU中提取出FunctionCode,然后根据FunctionCode找到相应的处理函数。xMBFunctionHandler结构体类型变量xFuncHandlers中定义了各个FunctionCode对应的处理函数pxHandler,函数的第一个参数ucMBFrame是PDU的存储地址,第二个参数usLength返回PDU的长度。如果帧不是一个广播帧,则需要设备发出一个回复,如果前面有错误发生,则要回复一个错误报告帧。

22、在Keil中程序需要使用大模式编译,否则会出现error c249: data: segment too large的错误。

23、若使用波特率为9600,则 t3.5= ( 11 * 3.5 ) / 9600 = 4.01 ms。 不能使用8位模式的Timer,因为11.0590MHz主频在最大48分频后,最长的超时时间为1.11ms,不能满足T35的超时要求。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top