当前位置: 首页 > news >正文

libserailport交叉编译适配说明

1:libserialport简介

github路径
自己的gitee路径
libserialport 是一个跨平台的串口通信库,由 sigrok 项目开发。它简洁、易用,并且支持多种操作系统。

libserialport 支持阻塞和非阻塞模式,可以根据你的需求选择适当的模式。阻塞模式下,操作会等待完成或超时,而非阻塞模式下,操作会立即返回。通过使用 sp_blocking_* 和 sp_nonblocking_* 函数,你可以轻松实现这两种模式。

2:交叉编译脚本

1:将下面的代码保存为一个脚本,使用source执行;
2:注意先修改 CROSS_COMPILE 和 prefix 路径;
3:编译步骤请参考编译说明;

#!/bin/bash# 源码地址 https://github.com/sigrokproject/libserialport#export CROSS_COMPILE=<交叉编译工具链前缀>
export CROSS_COMPILE=/opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export AR=${CROSS_COMPILE}ar
export AS=${CROSS_COMPILE}as
export LD=${CROSS_COMPILE}ld
export RANLIB=${CROSS_COMPILE}ranlib
export STRIP=${CROSS_COMPILE}strip
echo "cross ok"# 编译说明
# 1: 先执行 make clean 
#    source build.sh,注意修改交叉编译工具链
# 2:执行 ./autogen.sh
# 3: 修改交叉编译工具链和生成目标文件路径
#    ./configure --enable-tools=yes --host=aarch64-linux-gnu --prefix=/home/djq/mokar/cv2x_libs/libserialport-0.1.1/targets/
# 4:make
# 5:make install
# 6:libserialport-0.1.1/targets/ 路径下会生成目标文件

3: libserialport对比系统自带的read和write优势

libserialport 和直接使用系统自带的 read 和 write 函数来操作串口设备在功能和便利性上有一些区别。以下是一些主要的区别和考虑因素:

  1. 易用性
    libserialport: 提供了更高级的抽象,简化了串口的打开、配置和通信操作。处理串口通信时,开发者不需要深究底层细节,如设置串口参数和处理各种可能的错误。
    系统自带的 read 和 write: 需要开发者手动处理串口的打开、配置、参数设置以及错误处理。尽管更灵活,但容易出错且代码更复杂。
  2. 跨平台支持
    libserialport: 设计之初就考虑了跨平台支持,能在 Linux、Windows 和 macOS 上运行而无需修改代码。这对需要跨平台兼容的项目非常有用。
    系统自带的 read 和 write: 这些是 POSIX 标准函数,主要在 Unix/Linux 系统上原生支持。要在其他操作系统上使用,可能需要额外的工作。
  3. 功能扩展
    libserialport: 提供了更丰富的功能库,如列出系统中可用的串口、设置和获取串口参数、阻塞和非阻塞读写操作、事件通知等。
    系统自带的 read 和 write: 只提供基本的读写功能。若要实现高级功能(比如列出串口、流控等),需要额外编写大量代码。
  4. 代码简洁性
    libserialport: 提供了更简洁的 API,减少了重复代码,提高了代码的可读性和维护性。
    系统自带的 read 和 write: 需要写更多的样板代码来实现同样的功能。例如,配置串口需要手动使用 termios 结构体和相关函数。
  5. 错误处理
    libserialport: 内置了更好的错误处理机制,可以方便地进行错误检测和处理。
    系统自带的 read 和 write: 需要手动处理每一个系统调用的返回值,并进行相应的错误处理。
http://www.lryc.cn/news/441778.html

相关文章:

  • C语言中的一些小知识(二)
  • 使用 Go 语言实现简单聊天系统
  • 用友U8二次开发工具KK-FULL-*****-EFWeb使用方法
  • 【经验帖】脏读和不可重复读的概念及影响
  • MTK zephyr平台:USB升级、枚举流程
  • golang操作mysql利器-gorm
  • 09 Shell Scriptfor循环结构语句
  • 【Java】并发集合
  • 活动邀请|景联文科技与您相约华为全联接大会2024
  • 周边游|基于springBoot的周边游平台设计与实现(附项目源码+论文+数据库)
  • 【编程基础知识】mysql是怎样执行一条sql语句的,涉及到哪些环节步骤是,mysql的整体体系结构是啥样的,有哪些组件
  • 如何上传tauri项目到csdn gitcode
  • 【速成Redis】02 Redis 五大基本数据类型常用命令
  • UnLua扩展C++函数和蓝图自定义事件
  • 干耳屎硬掏不出来怎么办?质量最好的可视挖耳勺推荐
  • 谷歌 Chrome 最新版升级:更强的安全检查功能守护你的上网安全
  • 深度学习自编码器 - 收缩自编码器(CAE)篇
  • Dubbo与SpringCloud的区别和优缺点
  • ★ C++进阶篇 ★ 多态
  • pg入门3—详解tablespaces2
  • python 爬虫 selenium 笔记
  • git分支管理的一些常用规范
  • GPT-4论文阅读
  • this 指向
  • 【贪心算法】贪心算法一
  • windnd.hook_dropfiles中的create_buffer值太小无法拖放长文件名
  • Gitlab runner的使用示例(二):Maven + Docker 自动化构建与部署
  • QNX Hypervisor(十)Linux Guest IPC 二
  • 怎样把PPT上顽固的图标删了
  • 【论文阅读】Slim Fly: A Cost Effective Low-Diameter Network Topology 一种经济高效的小直径网络拓扑