国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
TX2/Linux下can總線的接收與發(fā)送命令和C程序?qū)嵗齙candump命令

使用CAN本人歸納為6個步驟:

0.測試之前最好先下載安裝好測試工具can-utils

sudo apt-get install can-utils

1.加載can設(shè)備驅(qū)動:

  1. sudo modprobe can
  2. sudo modprobe can_raw
  3. sudo modprobe mttcan

2.設(shè)置波特率(注意這里不能使能can或者打開can)

  1. sudo ip link set can0 type can bitrate 500000 dbitrate 2000000 berr-reporting on fd on
  2. sudo ip link set can1 type can bitrate 500000 dbitrate 2000000 berr-reporting on fd on

如果出現(xiàn)了RTNETLINK answers: Device or resource busy 這種情況,則需要使用命令

  1. sudo ip link set down can0
  2. sudo ip link set down can1

來關(guān)閉掉;

3.設(shè)置為回環(huán)模式(因為要測試使用,在不外接can驅(qū)動和120歐姆電阻的情況下是可以回環(huán)測試的,使用can0設(shè)備)

sudo ip link set can0 type can loopback on

如果由外設(shè),可以省略此步驟。

4.開啟can設(shè)備:

  1. sudo ip link set up can0
  2. sudo ip link set up can1

5.發(fā)送和接收:

發(fā)送:

cansend can0 123#abcdabcd

cansend是命令,can0是參數(shù),123是ID,#分隔符,abcdabcd是發(fā)送數(shù)據(jù)。

接收:接收需要另外開一個終端

candump can0

candump 是命令,can0是參數(shù),表示哪個設(shè)備,這個命令是阻塞型的,會一直等待接收。

6.關(guān)閉can設(shè)備。

  1. sudo ip link set down can0
  2. sudo ip link set down can1

上面的測試,本人是在tx2上面一會兒就跑通了。但是不滿足控制出身的技術(shù)人員對于控制的需要,所以需要自己寫一個程序來實現(xiàn)接收和發(fā)送。使用了實例程序:

兩個c文件:1.can_send.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. #include <net/if.h>
  6. #include <sys/ioctl.h>
  7. #include <sys/socket.h>
  8. #include <linux/can.h>
  9. #include <linux/can/raw.h>
  10. int main()
  11. {
  12. int s,nbytes;
  13. struct sockaddr_can addr;
  14. struct ifreq ifr;
  15. struct can_frame frame[2]={{0}};
  16. s=socket(PF_CAN,SOCK_RAW,CAN_RAW);
  17. strcpy(ifr.ifr_name,"can0");
  18. ioctl(s,SIOCGIFINDEX,&ifr);
  19. addr.can_family = AF_CAN;
  20. addr.can_ifindex = ifr.ifr_ifindex;
  21. bind(s,(struct sockaddr*)&addr,sizeof(addr));
  22. setsockopt(s,SOL_CAN_RAW,CAN_RAW_FILTER,NULL,0);
  23. frame[0].can_id = 0x11;
  24. frame[0].can_dlc =1;
  25. frame[0].data[0]= 'Y';
  26. frame[1].can_id = 0x11;//0x33;
  27. frame[1].can_dlc =1;
  28. frame[1].data[0]= 'N';
  29. while(1)
  30. {
  31. nbytes = write(s, &frame[0], sizeof(frame[0]));
  32. printf("nbytes=%d\n",nbytes);
  33. if(nbytes != sizeof(frame[0]))
  34. {
  35. printf("Send Error frame[0]\n!");
  36. break; //發(fā)送錯誤,退出
  37. }
  38. sleep(1);
  39. nbytes = write(s, &frame[1], sizeof(frame[1]));
  40. if(nbytes != sizeof(frame[1]))
  41. {
  42. printf("Send Error frame[1]\n!");
  43. break;
  44. }
  45. sleep(1);
  46. }
  47. close(s);
  48. return 0;
  49. }

2.can_receive.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. #include <net/if.h>
  6. #include <sys/ioctl.h>
  7. #include <sys/socket.h>
  8. #include <linux/can.h>
  9. #include <linux/can/raw.h>
  10. int main()
  11. {
  12. int s, nbytes;
  13. struct sockaddr_can addr;
  14. struct ifreq ifr;
  15. struct can_frame frame;
  16. struct can_filter rfilter[1];
  17. s = socket(PF_CAN, SOCK_RAW, CAN_RAW); //創(chuàng)建套接字
  18. strcpy(ifr.ifr_name, "can0" );
  19. ioctl(s, SIOCGIFINDEX, &ifr); //指定 can0 設(shè)備
  20. addr.can_family = AF_CAN;
  21. addr.can_ifindex = ifr.ifr_ifindex;
  22. bind(s, (struct sockaddr *)&addr, sizeof(addr)); //將套接字與 can0 綁定
  23. //定義接收規(guī)則,只接收表示符等于 0x11 的報文
  24. rfilter[0].can_id = 0x11;
  25. rfilter[0].can_mask = CAN_SFF_MASK;
  26. //設(shè)置過濾規(guī)則
  27. setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, &rfilter, sizeof(rfilter));
  28. while(1)
  29. {
  30. nbytes = read(s, &frame, sizeof(frame));
  31. //接收報文//顯示報文
  32. if(nbytes > 0)
  33. {
  34. printf("ID=0x%X DLC=%d data[0]=0x%X\n",frame.can_id,frame.can_dlc,frame.data[0]);
  35. //printf(“ID=0x%X DLC=%d data[0]=0x%X\n”, frame.can_id, frame.can_dlc, frame.data[0]);
  36. }
  37. }
  38. close(s);
  39. return 0;
  40. }

實測也是可以實現(xiàn)發(fā)送與接收的。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Linux CAN編程詳解
CAN Readme-linux
SOCKET UDP組播 實例
Linux下C獲取所有可用網(wǎng)卡信息
Linux c 獲取網(wǎng)絡(luò)接口IP地址
發(fā)現(xiàn)局域網(wǎng)所有主機(jī)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服