在現有的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通訊接口函數使用說明》一文。
感興趣的客戶可以和英創的技術支持聯系。
-
嵌入式主板
+關注
關注
7文章
6107瀏覽量
37083
發布評論請先 登錄
卡塔爾通訊與信息技術部與Ooredoo電信公司一行來訪達實智能開展培訓
龍芯中科成功舉辦2025信息技術應用創新產教融合交流會
PXB-6020(D):讓CAN通訊更靈活,Modbus接入更簡單
龍芯中科助力2025教育信息技術應用創新大賽成功舉辦
誠邁科技信創電腦助力2025第二屆教育信息技術應用創新大賽圓滿收官
寶馬南京信息技術有限公司開業
嵌入式接口通識知識之CAN接口
CAN 接口的“老炮”本色:ARMxy BL410 工業通訊全攻略
易華錄入選國家級信息技術應用創新典型解決方案
“信息技術應用產學協同人才培養行動計劃”正式發布,誠邁科技入選首批參與單位
佛瑞亞如何通過信息技術推動業務增長
飛騰主板為信創產業發展提高硬實力
DEKRA德凱成為沙特通信和信息技術設備技術法規認證機構
科普|信創是什么?一文讀懂“信息技術應用創新”戰略
英創信息技術SJA1000的CAN通訊接口函數擴展應用介紹
評論