下面是我的代码,然后代码呢实际的使用 需要注意,如果重新设置了can的引脚对应关系,需要重新配置设备树文件;

更改设备树文件:https://blog.csdn.net/cao849861802/article/details/111604277

然后注意can0SystemInit和can1SystemInit中的频率,125000,这个可以修改和从机相同的频率用来通信;

can_id这个是表示can的id这个发送接收的对应要注意;

#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>#include <sys/ioctl.h>
#include <net/if.h>
#include <linux/can.h>#include <pthread.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>#ifndef PF_CAN
#define PF_CAN 29
#endif#ifndef AF_CAN
#define AF_CAN PF_CAN
#endif/****************CAN START******************/
int can0fd;
int can1fd;
struct sockaddr_can can0Addr;
struct sockaddr_can can1Addr;void can0fdCreate()
{struct ifreq ifr;int ret = 0;memset(&ifr,0,sizeof(ifr));can0fd = socket(PF_CAN,SOCK_RAW,CAN_RAW);if(can0fd < 0){printf("can0fd create failed \r\n");return ;}   strcpy((char *)(ifr.ifr_name),"can0");ioctl(can0fd,SIOCGIFINDEX,&ifr);can0Addr.can_family = AF_CAN;can0Addr.can_ifindex = ifr.ifr_ifindex;if((ret = bind(can0fd,(struct sockaddr*)&can0Addr,sizeof(can0Addr))) < 0){printf("bind can0fd failed ,error = %d\r\n",ret);}
}void can1fdCreate()
{struct ifreq ifr;int ret = 0;memset(&ifr,0,sizeof(ifr));can1fd = socket(PF_CAN,SOCK_RAW,CAN_RAW);if(can1fd < 0){printf("can1fd create failed \r\n");}strcpy((char *)(ifr.ifr_name),"can1");ioctl(can1fd,SIOCGIFINDEX,&ifr);can1Addr.can_family = AF_CAN;can1Addr.can_ifindex = ifr.ifr_ifindex;if((ret = bind(can1fd,(struct sockaddr*)&can1Addr,sizeof(can1Addr))) < 0){printf("bind can1fd failed ,error = %d\r\n",ret);}
}void can0SystemInit()
{system("ifconfig can0 down");system("ip link set can0 type can bitrate 125000 triple-sampling on");system("ifconfig can0 up");
}void can1SystemInit()
{system("ifconfig can1 down");system("ip link set can1 type can bitrate 125000 triple-sampling on");system("ifconfig can1 up");
}int can0BufSend(char *buf,int len)
{int i = 0;int nbytes = 0;struct can_frame frame;printf("can 0 send buf = %s\r\n",buf);frame.can_id = 123;fcntl(fd,F_SETFL,FNDELAY);while(len > 0){frame.can_dlc = (len >= 8) ? 8 : len;memcpy(frame.data,buf,frame.can_dlc);buf = buf + frame.can_dlc;len = len - frame.can_dlc;if ((nbytes = write(can0fd, &frame, sizeof(frame))) != sizeof(frame)) {printf("can0 send buf failed ret = %d\r\n",nbytes);fcntl(fd,F_SETFL,0);return nbytes;}}fcntl(fd,F_SETFL,0);return 0;
}int can1BufSend(char *buf,int len)
{int i = 0;int nbytes = 0;struct can_frame frame;printf("can 1 send buf = %s\r\n",buf);frame.can_id = 124;while(len > 0){frame.can_dlc = (len >= 8) ? 8 : len;memcpy(frame.data,buf,frame.can_dlc);buf = buf + frame.can_dlc;len = len - frame.can_dlc;if ((nbytes = write(can1fd, &frame, sizeof(frame))) != sizeof(frame)) {printf("can1 send buf failed ret = %d\r\n",nbytes);return nbytes;}}return 0;
}void *can0Task(void *arg)
{int nbytes = 0;struct can_frame frame;char buf[16];can0SystemInit();can0fdCreate();while(1){memset(&frame,0,sizeof(frame));if ((nbytes = read(can0fd, &frame, sizeof(frame))) <= 0) {printf("can 0 recv failed,return \r\n");return NULL;}if(frame.can_dlc == 0)continue;if(frame.can_id == 124){memset(buf,0,sizeof(buf));memcpy(buf,frame.data,frame.can_dlc);printf("can 0 recv buf = %s\r\n",buf);}}return NULL;
}void *can1Task(void *arg)
{int nbytes = 0;struct can_frame frame;char buf[16];can1SystemInit();can1fdCreate();while(1){memset(&frame,0,sizeof(frame));if ((nbytes = read(can1fd, &frame, sizeof(frame))) <= 0) {printf("can 1 recv failed,return \r\n");return NULL;}if(frame.can_dlc == 0)continue;if(frame.can_id == 123){memset(buf,0,sizeof(buf));memcpy(buf,frame.data,frame.can_dlc);       printf("can 1 recv buf = %s\r\n",buf);}}return NULL;
}void canTask()
{pthread_t ntid;pthread_create(&ntid, NULL, can0Task, NULL);printf("can 0 task start ---------\r\n");pthread_create(&ntid, NULL, can1Task, NULL);printf("can 1 task start ---------\r\n");  sleep(5);can0BufSend("can 0 send",strlen("can 0 send"));can0BufSend("can 0 send",strlen("can 0 send"));can0BufSend("can 0 send",strlen("can 0 send"));sleep(5);can1BufSend("can 1 send",strlen("can 1 send"));can1BufSend("can 1 send",strlen("can 1 send"));can1BufSend("can 1 send",strlen("can 1 send"));
}
/****************CAN stop******************/int main()
{canTask();while(1){sleep(1);}return 0;
}

imx6ul can调试(代码)相关推荐

  1. 调试代码遗留_陷入遗留代码地狱吗? 这里有一些想法可以帮助您处理情况

    调试代码遗留 by Felipe Lopes 通过Felipe Lopes 陷入遗留代码地狱吗? 这里有一些想法可以帮助您处理情况 (Stuck in legacy code hell? Here a ...

  2. 记录一次自己调试代码的过程

    今年年初我们做了一套防窃电的软件,其中通讯采取的是串口方式.前段时间,根据现场的反馈,我们增加了蓝牙通讯的功能.系统界面如下图所示: 今天,现场人员反馈说:"解析的数据出现问题", ...

  3. ECLIPSE远程调试出现如下问题 ECLIPSE中调试代码提示找不到源

    ECLIPSE远程调试出现如下问题  ECLIPSE中调试代码提示找不到源 如此提示是由于没有JAR包中找不到MAIN,可以手动添加或自己修改 利用ECLIPSE填写JAR中的MAIN方法后,就可以调 ...

  4. php执行跟踪_PHP使用debug_backtrace方法跟踪调试代码调用详解

    本文实例讲述了PHP使用debug_backtrace方法跟踪调试代码调用.分享给大家供大家参考,具体如下: 在开发过程中,例如要修改别人开发的代码或调试出问题的代码,需要对代码流程一步步去跟踪,找到 ...

  5. java后门_@Java Web 程序员,我们一起给程序开个后门吧:让你在保留现场,服务不重启的情况下,执行我们的调试代码...

    从数据库.redis取了些数据,做了一些运算后,没抛异常,但是就是结果不对 抛了个空指针异常,但是看代码,感觉没问题,是取出来就是空,还是中间什么函数把它改坏了 发现导致一个bug的原因是用了JVM缓 ...

  6. html禁止f12键代码,网站禁用f12 禁止调试代码方法

    正常情况下 自己的一些网站的一些代码不想被别人扒来扒去的,可以看看本方法. 可以设置复制提示,禁f12,禁止调试是很有必要的 当然这个防不了大佬,只能防防小学生 具体方法: 1.首先我们需要下载web ...

  7. 每日一皮:资深程序员调试代码的样子...

    这就是资深程序员调试代码的样子 也就是说闭着眼睛也能处理bug 往期推荐 每日一皮:产品和开发在线上吵了许久... 每日一皮:软件从业人员表情图... 每日一皮:强大的sudo ... 每日一皮:周六 ...

  8. linux下使用syslog日志调试程序快速的调试代码信息的过程

    linux下使用syslog日志调试程序快速的调试代码信息的过程 环境背景:ubuntu 20.0.4 开发环境:QtCreator 功能:查看函数是否调用成功:函数调用执行的过程等等: 1.使用头文 ...

  9. 怎么在vue的@click里面直接写js_【转】为 Node.js 贡献你的力量 ———— 调试代码

    原文作者:百万扩散性甜面包 himself65 原文链接: 为 Node.js 贡献你的力量 ---- 调试代码​www.himself65.com Node.js 作为一个世界级的项目,能为它贡献源 ...

  10. alert不会影响到页面中其他代码执行_JavaScript调试技巧合集——为什么不推荐使用alert调试代码?...

    导读 本文是<JavaScript调试技巧合集>系列分享中的一篇,笔者希望在每篇文章中介绍一个关于JS调试的小知识点,希望你在读完这个系列后,在调试技巧上能够更加运用自如.下面是知识点概览 ...

最新文章

  1. C++知识点54——RTTI(运行时类型识别)
  2. linux下json数据解析,Linux下使用jq简单解析json的方法
  3. 比较OpenBLAS,Intel MKL和Eigen的矩阵相乘性能
  4. 一、Java Web——JDBC快速入门(详解)
  5. Node.js笔记-使用socket.io构建websocket聊天室
  6. python画旋转圆_Python使用PyQt界面库绘制不停旋转的圆控件
  7. 小腿肌肉该怎么练?有哪些训练动作?
  8. Android10以上之APEX格式介绍
  9. Unable to process Jar entry
  10. 苹果cmsv10精仿好看的挖片网免费自适应简约模板
  11. 视觉SLAM十四讲学习笔记——ch9后端1
  12. 设计模式 单例模式解决线程安全问题
  13. spss因子分析结果解读_SPSS进行问卷量表信度检验(详细操作过程及结果分析)——【杏花开生物医药统计】...
  14. 装系统提示缺少计算机所需的介质驱动程序,win8系统UEFi安装提示“缺少计算机所需的介质驱动程序”的图文步骤...
  15. sql 多表连接多条件匹配查询,按匹配度排序
  16. 教你怎样将txt/html转成chm
  17. ShowWindow与UpdateWindow
  18. Android开发-魔窗DeeplinkDemo-AndroidStudio
  19. OpenCV——图像连通域
  20. 快递查询单号查询,怎么查物流到哪了

热门文章

  1. 企鹅号怎么赚钱,企鹅号怎么运营,企鹅号怎么写爆文
  2. 14.Java- Spring
  3. 基于眼底照片的病理性近视眼及识别
  4. 【解决方案】logging: 中文log乱码
  5. 单片机2017福建省中职省赛_2017年福建省职业院校技能大赛首批设115个赛项
  6. 在记事本上用java写一段代码,程序到底是如何跑起来的?
  7. 《坂上之云》电影手记
  8. window10添加局域网计算机,Windows10系统创建局域网图文教程
  9. 一个链接直接curl可以访问,但是restTemplate访问不了
  10. 博图注册表删除方法_回收站被清空文件删除的恢复方法