IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> C++ Boost Asio实现一个跨平台CAN总线转TCP,支持多TCP连接 -> 正文阅读

[网络协议]C++ Boost Asio实现一个跨平台CAN总线转TCP,支持多TCP连接

介绍

几前的一个项目,使用Boost Asio重构了下:使用CMake统一编译,集成了一些开源第三方库的源码,比如googletest,gtest, zmq(弃用)及其他一些小的高性能开源代码,用于线程通讯。

项目源起于做汽车新能源相关工作时,希望能使用多个客户端(如终端)连接到一路CAN通讯上,可以支持局域网(比如可以方便工作电脑连接到CAN通讯测试专用电脑)。

要做的第一步,就是按照周立功can test工具里面的ControlCan.dll接口,实现一个同名DLL,用于替换原有ControlCan.dll,按照配置文件尝试读取远程can agent的IP地址及端口,can agent实现真正的CAN收发。这个时候,can test工具也可以作为一个客户端连接到can agent了。

这次改造,希望使用CMake来替换原有Visual Studio工程,项目结构更加简介清晰,没有那么多工程文件。由于更加习惯使用vscode remote ssh,所以干脆在Ubuntu下开发编译,支持跨系统编译及运行了(再测试调整下项目编译脚本,也可以支持ARM),编译操作也统一了。

项目目录结构

├── 3rd
├── asio_example
├── bin
├── build
├── can_agent
├── cmake
├── CMakeLists.txt
├── CMakePresets.json
├── config_file
├── doc
├── git_ver_src_in
├── include
├── libControlCAN
├── libzmq
├── README.md
├── test
├── test_asio_server
└── test_zmq

libControlCan的实现

Boost库被编译成了静态库,libControlCan静态链接到boost,所以使用就不依赖boost了。libControlCan除了支持can test中原有的接口,通过桥接方式,导出了CAN及TCP两个类,支持分别与CAN设备直接通讯,及TCP通讯。

由于需要支持终端terminal,所以can agent及libControlCan收发数据采用文本,即把CAN帧转换为文本发送,收到后再解析回二进制。专门写了个高性能的template class转换二进制/文本,目前支持POD类型及char指针,好像也支持std::string,忘了懒得查源码了。

测试及性能

工程带有一个can agent,原本是作为测试libControlCAN用的,后来直接转正了。针对can agent,测试及优化了若干次。

笔记本CPU型号为AMD Ryzen 5 PRO 4650U,在每秒1000帧的情况下(10ms发送10帧本文帧),can agent及TCP client的CPU占用大致为2%,以后有空把实测结果补上吧(使用Ubuntu模拟CAN,及Windows使用周立功USBCANII连接CAN设备)。

最终优化之后,Ubuntu下使用gperftools测试can agent的主要时间分布:

?结语

创建了个C++群 768560256,欢迎加入讨论交流 C++ / Boost / template 等技术,也欢迎讨论其他技术 Linux / ARM,工业软件,职场交流。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 01:01:36  更:2022-09-21 01:02:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 4:38:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码