定制一个can-bus应用层协议及其驱动

定制一个can-bus应用层协议及其驱动

ID:27425928

大小:6.82 MB

页数:11页

时间:2018-12-02

定制一个can-bus应用层协议及其驱动_第1页
定制一个can-bus应用层协议及其驱动_第2页
定制一个can-bus应用层协议及其驱动_第3页
定制一个can-bus应用层协议及其驱动_第4页
定制一个can-bus应用层协议及其驱动_第5页
资源描述:

《定制一个can-bus应用层协议及其驱动》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、定制一个CAN应用层协议及其驱动目录CAN应用层协议驱动函数制定CAN应用层协议说明CAN应用层协议结构定义定制CAN应用层协议本节制定一个简单的CAN应用层协议并实现其驱动,协议中只使用了标准帧中的数据帧。协议定义如下:11位报文ID的分配ID.6~ID.3ID.10~ID.7ID.2~ID.0SrcAddr:发送CAN报文节点的地址DstAddr:接收CAN报文节点的地址FunCode:功能码,指明一帧数据的作用其他定义FunDataLen:功能参数长度变量,指示功能参数的字节个数FunData:功能参数数

2、组,最多包含8个字节目录CAN应用层协议驱动函数制定CAN应用层协议说明CAN应用层协议结构定义CAN应用层协议结构体定义根据定制的CAN应用层协议,定义CanAppProtocolFrame_t联合数据类型,如下:typedefunion{CanFrame_tCanFrame;struct{unsignedlongSrcAddr:4;//源地址unsignedlongDstAddr:4;//目的地址unsignedlongFunCode:3;//功能码unsignedlongresev:5;//保留位unsi

3、gnedlongresev1:8;//保留位unsignedlongresev2:8;//保留位unsignedcharFF;//是否为扩展帧unsignedcharRTR;//是否为远程帧unsignedcharFunCodeLen;//功能参数长度unsignedcharFunCode[8];//功能参数数组}ProtocolFrame;}CanAppProtocolFrame_t;typedefstruct{unsignedlongID;//帧IDunsignedcharFF;//是否为扩展帧unsign

4、edcharRTR;//是否为远程帧unsignedcharDLC;//帧数据长度unsignedcharData[8];//帧数据}CanFrame_t;由于联合体成员是共享内存的,所以ProtocolFrame和CanFrame_t结构体实例的成员之间存在对应关系。CAN应用层协议结构体定义ProtocolFrame结构体实例以小端存储结构为例,ProtocolFrame结构体实例的成员与CanFrame-t结构体实例成员占用内存空间是一一对应的。CanFrame_t结构体实例内存地址低高resev1res

5、ev2FFRTRFunCodeLenFunCode[0]FunCode[8]DstAddrSrcAddrBit7Bit4Bit3Bit0FunCoderesev5Bit7Bit3Bit2Bit0……ID[23:16]ID[15:8]ID[7:0]FFRTRDLCData[0]Data[8]ID[31:24]……目录CAN应用层协议驱动函数制定CAN应用层协议说明CAN应用层协议结构定义CAN报文处理函数定义首先,CAN应用层协议驱动定义一个函数指针类型,在CAN帧处理函数中调用该类型的回调函数识别功能码和功能参

6、数。typedefvoid(*CapHandle_PFUN)(unsignedcharFunCode,unsignedcharFunData)CAN报文处理函数intCAN_CapFrameHandle(charLocalAddr,CanFrame_t*pCanFrame,CapHandle_PFUNcallback)功能码功能参数函数功能:处理接收到的CAN帧本地地址指向接收到的CAN帧的指针具体处理CAN帧的回调函数指针返回值:1——报文处理成功;0——报文处理过程中出错。CAN报文处理函数CAN帧处理函数

7、具体如下:IntCAN_CapFrameHandle(charLocalAddr,CanFrame_t*pCanFrame,CapHandle_PFUNcallback){CanAppProtocolFrame_t*pCp=NULL;if(pCanFrame==NULL)return0;//如果指针为空则返回失败pCp=(CanAppProtocolFrame_t*)pCanFrame;//转化成指针类型if(pCp->ProtocolFrame.FF!=0)return0;//不使用扩展帧if(pCp->Pr

8、otocolFrame.RTR!=0)return0;//不使用远程帧if(pCp->ProtocolFrame.DstAddr!=LocalAddr)return0;//保证接收帧的地址等于//本地地址if(callback!=NULL){//调用回调函数处理CAN帧callback(pCp->ProtocolFrame.FunCode,pCp->ProtocolFrame.FunD

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。