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

Qt读写sysfs

本文介绍Qt读写sysfs。

在嵌入式Linux系统上开发Qt应用程序,经常会涉及到外设的控制,比如GPIO,PWM的控制,Linux环境下可以像操作文件一样操作它们,这通常会涉及到sysfs的读写。本文以读写GPIO为例,简要介绍下如何使用Qt读写sysfs。

1.配置

Linux命令行指令(这里导出gpio5):

echo 5 > /sys/class/gpio/export

在Qt应用程序中,可以启动一个进程来执行上述指令,使用QProcess提供的静态函数来完成,参考代码如下:

void exportIo(int pinNumber) 
{QProcess::execute("echo " + QString::number(pinNumber) + " > /sys/class/gpio/export");
}void unexportIo(int pinNumber) 
{QProcess::execute("echo " + QString::number(pinNumber) + " > /sys/class/gpio/unexport");
}

2.写sysfs

Linux命令行指令(这里对gpio5写1):

echo 1 > /sys/class/gpio/gpio5/value

参考代码如下:

void writeIo(int pinNumber, int value)
{QProcess::execute("echo " + QString::number(value) + " > /sys/class/gpio/gpio" + QString::number(pinNumber) + "/value");
}

3.读sysfs

Linux命令行指令:

cat /sys/class/gpio/gpio5/value

参考代码如下:

int readIo(int pinNumber)
{QProcess process;int value = 0;process.start("cat", QStringList() << "/sys/class/gpio/gpio" + QString::number(pinNumber) + "/value");process.waitForFinished();value = process.readAll().trimmed().toInt();return value;
}

这里是阻塞的方式执行的。如果读时间较长,也可以绑定finish信号,参考代码如下:

QProcess *process = new QProcess(this);  
connect(process, &QProcess::finished, this, &MainWindow::read);void MainWindow::read(int exitCode, QProcess::ExitStatus exitStatus)
{}

注意

不同的嵌入式Linux环境下外设的sysfs的路径和操作方法可能不一样,需根据实际情况修改。

总结,本文介绍了Qt读写sysfs。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 8月13日学习笔记 LVS
  • 代码随想录算法训练营day42|动态规划part09
  • 【中等】 猿人学web第一届 第5题 js混淆-乱码增强
  • HAProxy原理及实例
  • 51单片机学习记录-数码管操作
  • Unity 流光shader的思路
  • 开源模型应用落地-LangChain高阶-记忆组件-RedisChatMessageHistory正确使用(八)
  • java注解(实现原理及自定义注解)
  • Flask获取请求信息
  • Stable Diffusion绘画 | ControlNet应用-NormalMap(法线贴图)
  • WPF APP生命周期和全局异常捕获
  • 使用Qdrant+FastText实现向量存储和检索
  • YOLO基础-目标检测的性能指标详解与计算方法
  • vulnhub系列:devguru
  • [SWPUCTF 2021 新生赛]PseudoProtocols(构造伪协议)
  • Apache Pulsar 2.1 重磅发布
  • CAP理论的例子讲解
  • crontab执行失败的多种原因
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • maya建模与骨骼动画快速实现人工鱼
  • Redis学习笔记 - pipline(流水线、管道)
  • spark本地环境的搭建到运行第一个spark程序
  • spring学习第二天
  • Tornado学习笔记(1)
  • 编写高质量JavaScript代码之并发
  • 二维平面内的碰撞检测【一】
  • 给github项目添加CI badge
  • 前端
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 云大使推广中的常见热门问题
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​浅谈 Linux 中的 core dump 分析方法
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (C++哈希表01)
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (超详细)语音信号处理之特征提取
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (简单) HDU 2612 Find a way,BFS。
  • (南京观海微电子)——示波器使用介绍
  • (三)elasticsearch 源码之启动流程分析
  • (四)图像的%2线性拉伸
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • ... 是什么 ?... 有什么用处?
  • .NET MVC之AOP
  • .NET+WPF 桌面快速启动工具 GeekDesk
  • .NET6实现破解Modbus poll点表配置文件
  • .NET程序员迈向卓越的必由之路
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • @component注解的分类
  • @RequestBody与@RequestParam
  • @vue-office/excel 解决移动端预览excel文件触发软键盘
  • [04] Android逐帧动画(一)
  • [AIGC] Java 和 Kotlin 的区别