在现有的can_api.h所提供的接口函数的基础上,推出can接口通讯一些扩展应用功能,主要是为每个接收的数据包均加上了时间标签,以支持实时控制的应用。为了兼容以前接口函数,can_api.h保持不变,英创公司另外定义了一个can_api_ex.h,在该文件中定义了带有时间标签的can数据报文结构。
typedef struct
{
// can数据报文id,其中
bit 0-28 : can identifier (11/29 bit)
bit 29 : error frame flag (0 = data frame, 1 = error frame)
bit 30 : remote transmission request flag (1 = rtr frame)
bit 31 : frame format flag (0 = standard 11 bit, 1 = extended 29 bit)
dword dwcan_id;
// can数据报文中的数据长度
dword dwcan_datlen;
// can数据报文中的数据
uchar ucdat[8];
// can数据报文的时间标签,单位为毫秒
dword dwtimetick;
} can_frame, *pcan_frame;
获取带有时间标签的can接收报文,可通过调用标准的readfile( ) 来实现,相应的发送函数也可调用writefile( )来处理。以下为接收线程中的获取带有时间标签的can数据报文的方法:
waitforsingleobject( cecan->m_hrxevent, 15 );
{
dwlen = 0;
bresult = readfile(cecan->m_hcan,
&cecan->can_frame,
sizeof(can_frame), &dwlen, null );
if( dwlen==sizeof(can_frame) ) // receive a can frame
{
if( dwlasttimetick == 0 )
{
printf( '0x%08x - %ld\n', cecan->can_frame.dwcan_id, cecan->can_frame.dwtimetick );
dwlasttimetick = cecan->can_frame.dwtimetick;
}
else
{
printf( '0x%08x - %ld\n', cecan->can_frame.dwcan_id, cecan->can_frame.dwtimetick-dwlasttimetick );
dwlasttimetick = cecan->can_frame.dwtimetick;
}
}
}
经过测试,在英创嵌入式主板上can时间标签的精度能够保证在±1ms。
由于读取带有时间标签的can数据报文采用的是系统标准函数readfile,所以对该扩展功能感兴趣的老客户,需要对已有的英创嵌入式主板wince内核进行升级,而can_api.lib不需做任何变化。具体can_api.h中定义的接口函数参见《基于sja1000的can通讯接口函数使用说明》一文。
感兴趣的客户可以和英创的技术支持联系。
传感器技术在汽车上的应用现状及发展趋势
中国科学家研发新型仿生手术缝线
宝马燃料电池技术几近现实 2020年或投产
荣耀9什么时候上市?最新消息:华为荣耀9旗舰即将发布,真机曝光,自带“秘密武器”却还有一个致命的缺点
华为智慧助手升级:支持手动添加、实时拍照保存更精确的停车信息
英创信息技术SJA1000的CAN通讯接口函数扩展应用介绍
QDL Integrate预付费系统的功能特点介绍
华为FreeBuds 4i无线耳机详细规格参数一览
diy的电路板制作示范
讯维为四川绵阳某中学成功打造精品录播教学系统!
如何实现CAN到CAN FD的升级?
智能家居连接设备市场,2022年将达到9.397亿台
使用噪音滤波器的音频线解决指南
车联网的安全你会担心吗
FMC子卡设计原理图:FMCJ450-基于ADRV9009的双收双发射频FMC子卡
【技术干货】为什么电机FOC控制越来越流行?
是什么让iPhone 12这么快就破发?
物联网风光无限 Zigbee将面临巨大挑战
线圈的自感和互感是如何区分的?电感线圈和自感线圈的区别在哪?
南通石油增设无人机干扰装置全方位防护油库安全