Linux中APP读取按键的4种方法

查询方式

在这里插入图片描述
驱动程序中构造、注册一个file_operations结构体,里面有对应的open,read函数。
APP 调用 open 时,导致驱动中对应的 open 函数被调用,在里面配置 GPIO 为输入引脚。APP 调用 read 时,导致驱动中对应的 read 函数被调用,它读取寄存器,把引脚状态直接返回给 APP。

休眠-唤醒方式

在这里插入图片描述
驱动程序中构造、注册一个file_operations结构体,里面提供有对应的open、read函数。

  • APP调用open时,导致驱动中对应的open函数被调用,在里面配置GPIO为输入引脚,并且注册GPIO的中断处理函数。
  • APP调用read函数时,导致驱动中对应的read函数被调用,如果有按键,数据则直接返回给APP,否则APP在内核态休眠。
    当用户按下按键时,GPIO 中断被触发,导致驱动程序之前注册的中断服务
    程序被执行。它会记录按键数据,并唤醒休眠中的 APP。
    APP 被唤醒后继续在内核态运行,即继续执行驱动代码,把按键数据返回给
    APP(的用户空间)。

poll方式

休眠-唤醒方式有个缺点:如果用户一直没操作按键,那么APP就会永远休眠。

我们可以给APP定个闹钟,这就是poll方式。

在这里插入图片描述
驱动程序中构造、注册一个 file_operations 结构体,里面提供有对应的open,read,poll函数。

APP调用poll或select函数,意图是“查询”是否有数据,这2个函数都可以指定一个超时时间,即这段时间内没有数据的话就返回错误。
这会导致驱动中对应的poll函数被调用,如果有按键数据则直接返回给APP,否则APP在内核态休眠一段时间。

当用户按下按键时,GPIO 中断被触发,导致驱动程序之前注册的中断服务
程序被执行。它会记录按键数据,并唤醒休眠中的 APP。
如果用户没按下按键,但是超时时间到了,内核也会唤醒 APP。

APP得到poll/select函数的返回结果后,如果确认是有数据的,则再调用read函数,这会导致驱动中的read函数被调用,这时驱动程序中含有数据,会直接返回数据。

异步通知方式

异步通知原理:发信号。
异步通知的实现原理是:内核给APP发信号。信号有很多种。这里发的是SIGIO。

驱动程序中构造、注册一个file_operations结构体,里面提供有对应的open、read、fasync函数。

  • APP调用open时,导致驱动中对应的open函数被调用,在里面配置GPIO为输入引脚,并且注册GPIO的中断处理函数。
  • APP给信号SIGIO注册自己的处理函数:my_signal_fun。
  • APP调用fcntl函数,把驱动程序的flag改为FASYNC,这会导致驱动程序的fasync函数被调用,它只是简单记录进行PID。
  • 当用户按下按键时,GPIO 中断被触发,导致驱动程序之前注册的中断服务程序被执行。它会记录按键数据,然后给进程PID发送SIGIO信号。
  • APP 收到信号后会被打断,先执行信号处理函数:在信号处理函数中可以去调用 read 函数读取按键值。
  • 信号处理函数返回后,APP 会继续执行原先被打断的代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/492841.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一个金融长期主义案例:金融壹账通的财务减亏与生产力创新之路

产业变革正在进入新一轮竞速期,社会对新质生产力的需求越来越迫切。在此背景下,金融业也正在坚定重塑自我、向外赋能的决心。 在微观的企业角度上,改变也正悄然发生。3月18日,在美港股双重上市的金融壹账通公布2023年年度业绩报告…

正则表达式不会用?一篇教你快速搞懂 !

目录 前言一、基础字符二、一系列常用的字符;1、一些元字符(Meta-characters) 三、一些高级概念1、贪婪与懒惰匹配2、两个实例加深理解1.颜色值的匹配:RGBS值2.ipv4 地址匹配 四、正则表达式常用语法**1.Flags(标志符或…

测试开发工程师(QA)职业到底需要干些什么?part5:性能测试工程师QA

工作职责 性能测试工程师(Performance Testing Engineer)是负责评估和优化软件、应用程序或系统在不同负载和压力条件下的性能的专业人员。他们的工作职责包括以下几个方面: 性能测试计划:性能测试工程师与开发团队、产品团队和系…

工作的第二天

昨天的进度 写今天思路如何做评论表的增删该查评论表的增加 选择用户和商品 弹出框出现了问题 检查代码 结构没有问题 定义变量也没有问题 控制太中也没有报错信息 问题解决了 出现的问题在哪里定义的变量都有问题应该现在 setup 上面 定义一个 变量 const ref ref(fals…

Autosar-CanNm、Nm配置详解(免费)-2

3.5NM配置项 3.5.1NmGlobalConstants NmNumberOfChannels Nm管理几个Can通信,通信我们只有智能进入网需要网络管理,因此一般这里只需要填1。 NmNumberOfClusters 如果NM需要与几个CanNm进行协同处理的话,那需要把这些配置为Cluster,即组…

让 AI 帮你写代码,开发提效神器来了

如今,大量程序员已经习惯在 AI 辅助下进行编程。据调研,AI 编码工具将程序员工作效率提升 50% 以上。 通义灵码是目前国内最受开发者喜爱的 AI 编码助手,可以提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、…

设置http响应报文

一、总结: (1)设置响应状态码: response.statusCode (2)设置响应状态描述: response.statusMessage() 使用的极少 (3)设置响应头信息: response.setHeader(头值,头名) (4)设置响应体: response…

一文详解CDGA证书含金量,非常详细!

在信息技术飞速发展的今天,数据已成为企业宝贵的资产。正确地管理和治理这些数据,对于企业实现数据价值最大化、保障数据安全和合规至关重要。这也使得数据治理领域的专业人才需求持续增长。CDGA(Certified Data Governance Architect&#x…

【并发】第三篇 Hash冲突的解决方法

导航 一. 简介二. 解决Hash冲突的方法1. 开放地址法1.1 线性探测再散列1.2 二次探测再散列1.3 伪随机探测再散列2. 链地址法3. 再哈希法一. 简介 哈希(hash)是将任意长度的输入数据转化为固定长度的输出数据的算法。哈希函数会将输入数据压缩并映射为一个固定长度的哈希值,…

Trello国内替代工具有哪些?分享5款

盘点5款类似Trello的本地部署项目管理工具:1.PingCode;2.Worktile;3.Teambition;4.redmine;5.TAIga.io。 Trello是一款杰出的协作与工作管理应用,专为追踪团队项目、凸显当前活动任务、分配责任人&#xff…

面试题 之 webpack

1.说说你对webpack理解?解决什么问题? Webpack 是实现前端项目的模块化,用于现代 JavaScript 应用程序的静态模块打包工具,被webpack 直接引用的资源打包进 bunde.js的资源,当webpack 处理应用程序时,它会在内部构建一…

Charles for Mac 强大的网络调试工具

Charles for Mac是一款功能强大的网络调试工具,可以帮助开发人员和测试人员更轻松地进行网络通信测试和调试。以下是一些Charles for Mac的主要特点: 软件下载:Charles for Mac 4.6.6注册激活版 流量截获:Charles可以截获和分析通…

CANalyzer使用_04 使用CAN报文发送数据

本文手把手介绍使用CAN来发送数据。分为创建工程,创建CAN报文,运行效果,参考文献。 1 创建工程 双击“CANalyzer->单击“I accept”->等一会等软件打开后,单击“File”->单击"New"->双击"CAN 500kBa…

2G-3G-4G-5G 语音方案

1.2G、3G时代,语音业务采用CS(Circuited Switched,电路交换)技术,即手机在通话前需在网络中建立一条独占资源的线路,直到通话结束才拆除。这种古老的技术存在耗资源、组网复杂、效率低等缺点。 2. 进入4…

每日学习笔记:C++ STL迭代器特性(Iterator Trait)、自定义迭代器

迭代器特性(Iterator Trait) 注意不同的迭代器种类类型之前有继承关系: 为迭代器编写泛型函数 自定义迭代器 实例

【Functional Affordances】机器人manipulation

文章目录 1. Robo-ABC: Affordance Generalization Beyond Categories via Semantic Correspondence for Robot Manipulation摘要和结论引言相关工作模型框架实验 2. Click to Grasp: Zero-Shot Precise Manipulation via Visual Diffusion Descriptors摘要和结论引言模型框架实…

电子商务营销中大数据分析的应用|大数据分析在B2C中的应用案例【抖音/京东/淘宝商品数据采集API接口的应用】

文章围绕对大数据分析在电子商务营销中的应用开展,研究了什么是大数据分析和电子商务的营销,以及对于电子商务的营销与大数据分析的结合目前是一个什么样的趋势,分析了大数据分析在电子商务营销中的作用,希望能帮助到大家。抖音/京…

码上时刻|通过逻辑视图 Logic View 快速实现批流一体

近年来,随着商业环境的竞争日益激烈,企业对于实时数据服务的需求急剧增加。Kyligence 在服务众多客户的过程中,很多企业对数据平台的要求越来越高,都希望能即时获取、处理数据,以便快速响应市场变化,加快决…

业界首次!搭载英伟达GPU,50倍性能提升!Zilliz发布Milvus 2.4向量数据库

在上周在美国硅谷圣何塞召开的NVIDIA GTC大会上,Zilliz[1] 发布了 Milvus 2.4 [2]版本。这是一款革命性的向量数据库系统,它在业界首次采用了英伟达 GPU 的高效并行处理能力和 RAPIDS cuVS 库中新推出的 CAGRA[3]( CUDA-Accelerated Graph In…

SpringBoot+ElasticSearch实现文档内容抽取、高亮分词、全文检索

需求 产品希望我们这边能够实现用户上传PDF、WORD、TXT之内得文本内容,然后用户可以根据附件名称或文件内容模糊查询文件信息,并可以在线查看文件内容。 一、环境 项目开发环境: 后台管理系统springbootmybatis_plusmysqles 搜索引擎&#…