资源描述:
《can总线自定义协议使用说明》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、CAN总线自定义协议使用说明用C语言实现自己的协议进入EV5000安装目录下builddriver目录(如图1),这个目录里面的fbserver.c文件即协议程序,用户不需要了解CAN口的细节编程,只需要按照该框架,用C语言来编写自己的协议即可。不可随意更改该文件中的函数名及头文件引用。图1CAN自定义协议程序的流程图主程序流程框架初始化接收线程流程(LW、CAN波特率)创建接收线程Read_CANInit()MsgDispatch()main_process()usleep(cycle)图2需要用户实现的函数voidInit(CAN
2、_PORTcanport)调用方式:仅在组态程序运行的时候执行一次功能:用户程序的初始化voidmain_process(CO_Data*d,UNS32id)调用方式:周期性执行,默认周期为10ms,周期可以在voidInit(CAN_PORTcanport)中调用Set_Cycle来设定,最小周期为10ms功能:用户程序的“main函数”voidMsgDispatch(CO_Data*d,Message*m)调用方式:每接收到一帧CAN数据,就执行一次功能:常用于对接收到的数据做解析,或者做出响应。与main_process没有关联
3、。供用户调用的API_V0.1除了C语言标准库中的API可以使用外,还提供以下APIvoidSet_Cycle(ms)功能:用于设定main_process的运行周期,参数:ms的单位为毫秒,非零UNS8Send_Msg(CAN_PORTport,Message*m,UNS8bExtended)功能:向CAN总线发送一帧CAN数据参数:port指向已打开CAN口的句柄,m指向Message结构体的指针,bExtended为1时按扩展帧发送,为0时按标准帧发送voidWrite_LW8K(UNS32n,UNS16val)功能:将val写
4、入LW8000+n的寄存器参数:n偏移量、最大999,val待写入的值UNS16Read_LW8K(UNS32n)功能:读取LW8000+n的寄存器的值参数:n偏移量、最大999voidSet_Timer(TimerCallback_tcallback,TIMEVALvalue,TIMEVALperiod)功能:使用定时器,经过设定的时间后,调用callback函数参数:callback回调函数指针,value单次定时时间,period周期定时时间intCopyToLW(UNS32addr,constvoid*src,size_tn)
5、功能:由src所指内存区域复制n个字节到LW+addr所在内存区域参数:addr为LW寄存器地址、最大8999;src待写入数据缓冲的指针;n写入的字节数说明:src和LW8000+addr所在内存区域不能重叠返回值:失败,返回‐1成功,返回写入的字节数intCopyFromLW(UNS32addr,constvoid*src,size_tn)功能:由LW8000+addr所在内存区域复制n个字节src所指内存区域说明:addr为LW寄存器地址、最大9999;src存储读取数据缓冲的指针;n读取的字节数返回值:失败,返回‐1成功,返回
6、读取的字节数早期的版本只能使用LW8000~8999这段寄存器,现在已取消该限制,CopyToLW,CopyFromLW这个两个API的参数意义有所变化,现在CopyToLW,CopyFromLW的第一个参数表示LW的地址,而之前用0~999表示LW8999~LW8999。因此,之前的代码需要做小的改动,如:老版本CopyFromLW(100,readbuff,8)表示将从LW8100开始的8个字节读取到readbuff中现在需要改成CopyFromLW(8100,readbuff,8)才具有相同的效果。UNS16Read_LW(UN
7、S32n,short*perror)功能:读取LWn的寄存器的值参数:n为LW寄存器地址、最大9999,perror返回错误码的指针返回值:当*perror=‐1时,地址超出范围,返回0当*perror=0是,成功,返回LWn的值UNS16Write_LW(UNS32n,UNS16val,short*perror)功能:将val写入LWn寄存器中参数:n为LW寄存器地址、最大8999;val待写入的数据;perror返回错误码的指针返回值:当*perror=‐1时,地址超出范围,返回0当*perror=0是,成功,返回1intSetL
8、B(unsignedintn,unsignedcharval)功能:将val的值写入LBn参数:n为LB寄存器地址、最大8999;val待写入的值(0或1)返回值:地址超出范围,返回‐1成功,返回LBn的值intGetL