kvaser在linux下的二次开发

2023-05-16

kvaser在linux下的二次开发

  1. linux下kvaser的驱动和SDK包安装
    下载连接: http://www.kvaser.cn/software/7330130980754/V5_13_0/linuxcan.tar.gz
    安装过程:
    解压:tar -xvzf linuxcan.tar.gz
    安装Kernel 头文件:sudo apt-get install build-essentia
    安装所有驱动:make;sudo make install
    确认安装成功:进入linuxcan/canlib/examples 执行:./listChannels
    如果我们安装的驱动是正确的,终端会显示出总线上可用通道的数量

  2. 开发
    在这以C语言和Cmake编译举例
    CMakeLists.txt文件中
    # 添加链接库
    target_link_libraries(kvaser_test canlib)
    头文件中添加#include <canlib.h>
    这样就可以使用kavser的API了.

  3. 简单代码举例

#include <canlib.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <unistd.h>
static void microseconds_sleep(unsigned long uSec) {
    struct timeval tv;
    tv.tv_sec = uSec / 1000000;
    tv.tv_usec = uSec % 1000000;
    int err;
    do {
        err = select(0, NULL, NULL, NULL, &tv);
    } while (err < 0 && errno == EINTR);
}
int main() {
    canHandle hnd_0;
    canStatus status_0;
    canInitializeLibrary();
    hnd_0 = canOpenChannel(0, 0);
    if (hnd_0 < 0) {
        printf("canOpenChannel failed, hnd_0=%d\n", hnd_0);
        return 1;
    }
    status_0 = canSetBusParams(hnd_0, canBITRATE_500K, 0, 0, 0, 0, 0);
    if (status_0 < 0) {
        printf("canSetBusParams failed, status_0=%d\n", status_0);
        return 1;
    }
    status_0 = canBusOn(hnd_0);
    if (status_0 < 0) {
        printf("canBusOn failed, status_0=%d\n", status_0);
        return 1;
    }
    while (1) {
        canStatus status;
        //测试发送
        // unsigned char data_send[8] = {0,2,3,4,5,7,8,9};
        // status = canWrite(hnd_0, 0x0c02a224, data_send, 8, canMSG_EXT);
        // if (status < 0) {
        //     printf("Failed, status == %d\n", status);
        // }
		 //测试一般读取
        long id;
        unsigned char data_read[8];
        unsigned int dlc, flags;
        unsigned long timestamp;
        status = canRead(hnd_0, &id, data_read, &dlc, &flags, &timestamp);
        if (status == canOK) {
            //printf("succeed, status == %d\n", status);
            for (int i = 0; i < 8; i++) {
                printf("date[%d]: %X\n", i, data_read[i]);
            }
        } else {
            printf("Failed, status == %d\n", status);
        }
        //测试确定ID读取
        //char data_read[8] = {0, 1, 2, 3, 4, 5, 6, 7};
        //uint32_t dlc, flags;
        //uint64_t timestamp;
        //status = canReadSpecific(hnd_0, 0x7FF, &data_read[0], &dlc, &flags, &timestamp);
        //if (status == canOK) {
        //    //printf("succeed, status == %d\n", status);
        //    for (int i = 0; i < 8; i++) {
        //        printf("date[%d]: %X\n", i, data_read[i]);
        //    }
        //} else {
        //    printf("faild, status == %d\n", status);
        //}
        microseconds_sleep(1000000);//这里添加了一个延时,确保缓存区不一直爆满
    }
    canBusOff(hnd_0);
    canClose(hnd_0);
    return 0;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kvaser在linux下的二次开发 的相关文章

  • 如何在 Linux 中使用单行命令获取 Java 版本

    我想通过单个命令获取 Linux 中的 Java 版本 我是 awk 的新手 所以我正在尝试类似的事情 java version awk print 3 但这不会返回版本 我将如何获取1 6 0 21从下面的Java版本输出 java ve
  • 如何在两个不同帐户之间设置无密码身份验证

    我们可以在两台机器的两种不同用途之间设置无密码身份验证吗 例如 计算机A有用户A 计算机B有用户B 我们可以设置密码 ssh 以便计算机 A 上的用户 A 使用其用户帐户 A 登录计算机 B 谢谢你 如果我理解你的问题 你能设置一下吗ssh
  • 编写多个mysql脚本

    是否可以在复合脚本中包含其他 mysql 脚本 理想情况下 我不想为包含的脚本创建存储过程 对于较大的项目 我想分层维护几个较小的脚本 然后根据需要组合它们 但现在 我很乐意学习如何包含其他脚本 source是一个内置命令 您可以在 MyS
  • 如何使用ffmpeg重叠和合并多个音频文件?

    我正在尝试将多个音频文件合并到一个文件中 但我可以使用以下命令来连接 而不是连接 ffmpeg v debug i file1 wav i file2 wav i file3 wav filter complex 0 0 concat n
  • 为什么 ld 无法从 /etc/ld.so.conf 中的路径找到库?

    我想添加 opt vertica lib64进入系统库路径 所以我执行以下步骤 1 添加 opt vertica lib64 into etc ld so conf 然后运行ldconfig 2 检查 bash ldconfig p gre
  • R 未获取用户库

    我有一个带 R 3 6 0 的 Fedora 30 系统 用户库设置在Renviron就像这个 R LIBS USER R LIBS USER R x86 64 redhat linux gnu library 3 6 事实上 它出现在交互
  • Bash 脚本 - 迭代 find 的输出

    我有一个 bash 脚本 其中需要迭代 find 命令输出的每一行 但似乎我正在迭代 find 命令中的每个单词 以空格分隔 到目前为止我的脚本看起来像这样 folders find maxdepth 1 type d for i in f
  • 我应该使用哪个 Linux 发行版作为 Xen 主机? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我为家庭办公室订购了一台服务器 我想用 Xen 对其进行分区 我认为这将使事情保持干净并且更容易维护 我将运行 MySQL PostgreSQL
  • CentOS目录结构是树形的吗?

    CentOS 上有相当于树的东西吗 如果你的 Centos 系统上没有安装 tree 无论如何我通常建议服务器设置使用最小安装磁盘 你应该在命令行中输入以下内容 yum install tree y 如果没有安装 那是因为您没有正确的存储库
  • 套接字:监听积压并接受

    listen sock backlog 在我看来 参数backlog限制连接数量 这是我的测试代码 server initialize the sockaddr of server server sin family AF INET ser
  • 如何查明 Ubuntu 上安装了哪个版本的 GTK+?

    我需要确定 Ubuntu 上安装了哪个版本的 GTK 男人似乎不帮忙 这个建议 https stackoverflow com a 126145 会告诉您安装了哪个 2 0 的次要版本 不同的主要版本将具有不同的包名称 因为它们可以在系统上
  • numpy 未定义符号:PyFPE_jbuf

    我正在尝试使用一百万首歌曲数据集 为此我必须安装 python 表 numpy cython hdf5 numexpr 等 昨天我设法安装了我需要的所有内容 在使用 hdf5 遇到一些麻烦之后 我下载了预编译的二进制包并将它们保存在我的 b
  • 如何获取 linux 实用程序 tail 的源代码?

    这个命令确实非常有用 但是我可以在哪里获取源代码以查看内部发生的情况 thanks tail 实用程序是 Linux 上 coreutils 的一部分 源压缩包 ftp ftp gnu org gnu coreutils coreutils
  • 如何让 clangd 转向 c++20

    当没有其他信息时 如何让 clangd 回退到 c 20 例如 在第一次构建之前 cmake 可以生成一个 这是在带有最新 LLVM 的 Arch Linux 上 这是通过 Emacs LSP 运行的 但这应该没有什么区别 你可以加 Com
  • 伊迪德信息

    重新定义问题 有什么方法可以获取所连接显示器的序列号吗 我想收集显示器的Eid信息 当我使用 logverbose 选项运行 X 时 我可以从 xorg 0 log 文件中获取它 但问题是 如果我切换显示器 拔出当前显示器 然后插入另一个显
  • 无法安装 WWW::Curl::Easy: SZBALINT/WWW-Curl-4.17.tar.gz : make NO

    我正在尝试在我的 Fedora 26 机器上安装 WWW Curl Easy gcc c I usr include D REENTRANT D GNU SOURCE O2 g pipe Wall Werror format securit
  • Linux 中热插拔设备时检测设备是否存在

    我正在运行 SPIcode http lxr free electrons com source drivers spi spi omap2 mcspi c在熊猫板上 我想知道其中的哪个功能code http lxr free electr
  • Linux shell 脚本:十六进制数字到二进制字符串

    我正在 shell 脚本中寻找一些简单的方法来将十六进制数字转换为 0 和 1 字符的序列 Example 5F gt 01011111 是否有任何命令或简单的方法来完成它 或者我应该为其编写一些开关 echo ibase 16 obase
  • sleep 0 有特殊含义吗?

    我看到很多用法sleep 0在我的一个客户项目中 代码看起来像这样 while true sleep 0 end 阅读一些像这样的答案this https stackoverflow com questions 3727420 signif
  • 如何在特定 systemd 服务重新启动时触发自定义脚本运行

    我想知道如何安排自定义脚本在重新启动服务时运行 我的用例是 每当重新启动 Tomcat 服务时 我都必须运行多个命令 我想知道是否有一种方法可以编写脚本并安排它在重新启动 Tomcat 服务时运行 我已将 tomcat 脚本设置为 syst

随机推荐

  • 单向链表快慢指针实际应用问题

    快慢指针 所谓快慢指针 xff1a 就是利用两个指针移动速度的不同来实现需求 xff0c 一般设置两个指针 xff0c 慢指针每次移动一格 xff0c 快指针每次移动两格 下面分享利用快慢指针解决中间值 链表环路以及环路入口的问题 中间值问
  • Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax 解决方法

    问题描述 Caused by java sql SQLSyntaxErrorException You have an error in your SQL syntax xff1b check the manual that corresp
  • 数组和JSON之间的格式转换

    数组和JSON之间的格式转换 主要代码 xff1a span class token keyword const span a span class token operator 61 span span class token const
  • Linux vncpasswd and passwd

    1 vncpasswd 功能 xff1a 使用vncpasswd命令可以创建或更改一个VNC的登录密码 xff0c 这将同时在用户的主目录下创建一个隐藏的目录 vnc xff0c 该目录内有一个文件passwd保存着VNC登录密码 语法 v
  • 修改运行中的docker容器的端口映射(简单、高效)

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言查看已经存在容器id关闭docker服务 xff0c 修改配置文件结束 xff0c 启动容器 前言 在docker run创
  • 人脸识别系列(十六):AMSoftmax

    论文链接 xff1a Additive Margin Softmax for Face Verification 2019 1 24 xff1a 注 xff1a 腾讯AI Lab的 CosFace Large Margin Cosine L
  • C语言:strtok()的用法。

    char strtok char str const char sep 1 sep参数是个字符串 xff0c 定义了用作分隔符的字符集合 xff1b 2 第一个参数指定一个字符串 xff0c 它包含了0个或者多个由sep字符串中一个或者多个
  • 日积月累

    目录 PYTHONUBUNTUTRACKINGNEURAL NETWORKMACHINE LEARNING PYTHON 有路径的地方要注意区别 和 ubuntu使用 分割文件夹 xff1b 对于别人的代码 xff0c 首先仔细阅读read
  • 19.RFID复习

    题型 填空题30分 xff08 一空一分 xff09 简答题30分 xff08 三道题 xff09 综合题40分 xff08 两道题 xff09 重点章节第一章 xff0c 第二章 xff08 见整理的练习题 xff09 xff0c 第四章
  • [Linux驱动]-----NAND FLASH

    一 NAND原理及硬件操作 C xff1a fopen xff0c fread xff0c fwrite APP open read write 1 txt 文件读写 文件系统 xff1a vfat ext2 ext3 yaffs xff0
  • sklearn中train_test_split里,参数stratify含义解析

    直接上代码 xff1a span class token keyword from span sklearn span class token punctuation span model selection span class toke
  • CentOS 7/8 预装的新型防火墙firewalld配置详解,

    前言 本文将会详细介绍CentOS 7 firewalld的来由 功能 常用命令 常用的案例及使用方法 希望能帮助读者全面了解firewalld xff0c 并能正确配置和使用它 centos7 firewalld firewalld与ip
  • webpack5常用配置

    该常用配置使用的npm包 xff1a span class token string property property 34 dependencies 34 span span class token operator span span
  • 【Linux】CentOS & Makefile

    目录 1 Ubuntu入门1 1 文件1 2 网络相关1 2 1 Linux网络相关概念和修改IP地址的方法IP信息临时修改ip地址NetworkManager修改主机名 1 2 2 关闭防火墙并设置开机开不启动firewalld临时和永久
  • HTTP请求报文(请求行、请求头、请求体)

    HTTP协议 1 简介 HTTP协议 xff08 Hyper Text Transfer Protocol xff0c 超文本传输协议 xff09 是用于从万维网 xff08 WWW World Wide Web xff09 服务器传输超文
  • Linux 下使用vscode调试C/C++程序记录

    Linux 下使用vscode调试C C 43 43 程序记录 本文主要介绍了 xff0c 在linux下使用vscode调试工程时的 xff0c 一些经验记录 基础配置 常用的配置方法网上的材料很多 xff0c 可以直接参照 链接 lin
  • 形状特征的提取

    物体和区域的形状是图像表达和图像检索中的另一重要的特征 但不同于颜色或纹理等底层特征 xff0c 形状特征的表达必须以对图像中物体或区域的划分为基础 由于当前的技术无法做到准确而鲁棒的自动图像分割 xff0c 图像检索中的形状特征只能用于某
  • c语言中全局变量在不同文件中的引用

    c语言中全局变量在不同文件中的引用 c语言中在某个文件中定义的全局变量可以在不同的文件中引用 xff0c 对数组和指针这两种全局变量在使用时必须要注意 xff0c 外部引用格式不正确时会出现编译或运行错误 下面通过不同的例子来说明数组和指针
  • Linux上MathGL的安装和使用

    Linux上MathGL的安装和使用 本人参考http mathgl sourceforge net doc en index html SEC Contents MathGL官网教程第一种方案在Ubuntu上对MathGL进行了编译安装
  • kvaser在linux下的二次开发

    kvaser在linux下的二次开发 linux下kvaser的驱动和SDK包安装 下载连接 http www kvaser cn software 7330130980754 V5 13 0 linuxcan tar gz 安装过程 解压