Linux socket CAN程式設計示例

2021-08-15 23:32:07 字數 1805 閱讀 4352

如下所示,**展示了linux下can的傳送和接收:

#include #include #include #include #include #include #include #include #include #define command "/sbin/ip link set can0 type can bitrate 125000"//將can0波特率設定為125000 bps

#define up "ifconfig can0 up"//開啟can0

#define down "ifconfig can0 down"//關閉can0

int main()

}; s = socket(pf_can, sock_raw, can_raw);//建立套接字

strcpy(ifr.ifr_name, "can0" );

ioctl(s, siocgifindex, &ifr); //指定 can0 裝置

addr.can_family = af_can;

addr.can_ifindex = ifr.ifr_ifindex;

bind(s, (struct sockaddr *)&addr, sizeof(addr));//將套接字與 can0 繫結

//setsockopt(s, sol_can_raw, can_raw_filter, null, 0);//設定過濾規則,取消當前注釋為禁用過濾規則,即不接收所有報文,不設定此項(即如當前**被注釋)為接收所有id的報文。

frame[0].can_id = 0x666;

frame[0]. can_dlc = 8;

frame[0].data[0] = 0x40;

frame[0].data[1] = 0x20;

frame[0].data[2] = 0x10;

frame[0].data[3] = 0x00;

frame[0].data[4] = 0x03;

frame[0].data[5] = 0x04;

frame[0].data[6] = 0x05;

frame[0].data[7] = 0x06;

for(int i=0;i<100;i++)

nbytes = read(s, &frame[1], sizeof(frame[1]));//接收匯流排上的報文儲存在frame[1]中

printf("the nbytes:%d\n", nbytes);

printf("length:%d", sizeof(frame[1]));

printf("id=0x%x dlc=%d\n", frame[1].can_id, frame[1].can_dlc);

printf("data0=0x%02x\n",frame[1].data[0]);

printf("data1=0x%02x\n",frame[1].data[1]);

printf("data2=0x%02x\n",frame[1].data[2]);

printf("data3=0x%02x\n",frame[1].data[3]);

printf("data4=0x%02x\n",frame[1].data[4]);

printf("data5=0x%02x\n",frame[1].data[5]);

printf("data6=0x%02x\n",frame[1].data[6]);

printf("data7=0x%02x\n",frame[1].data[7]);

//sleep(1);

}close(s);

return 0;

}

Linux socket can除錯測試記錄

1 設定波特率 每次重新設定can引數必須先關閉 ifconfig can0 down 比如要重新設定波特率為1m ip link set can0 type can bitrate 1000000 設定波特率為 1m 開啟ifconfig can0 up 2 can回環測試 每次重新設定can引數...

靜態聯編與動態聯編

在c 中,多型性主要是通過函式過載實現的。過載函式是指程式中對同名函式進行呼叫時,編譯器會根據函式引數的型別和個數,決定該呼叫哪一段函式 來處理這個函式呼叫。這種把函式呼叫與適當的函式 相對應的動作,叫做聯編。聯編分為靜態聯編和動態聯編。在編譯階段決定執行哪個同名的被呼叫函式,稱為靜態聯編。在編譯階...

靜態聯編和動態聯編

聯編是指乙個電腦程式自身彼此關聯 使乙個 源程式經過編譯 連線,成為乙個可執行程式 的過程,在這個聯編過程中,需要確定程式中的操作呼叫 函式呼叫 與執行該操作 函式 的 段之間的對映關係,按照聯編所進行的階段不同,可分為靜態聯編和動態聯編。靜態聯編 呼叫函式和被調函式在程式編譯時,他們在記憶體中的位...