APP怎么读取按键值

简介: APP怎么读取按键值

APP怎么读取按键值

在做单片机开发时,要读取GPIO按键,我们通常是执行一个循环,不断地

检测 GPIO 引脚电平有没有发生变化。但是在 Linux 系统中,读取 GPIO 按键要考虑到效率,引入了很多种方法:查询方式(非阻塞)、休眠-唤醒(阻塞方式)、

poll 方式、异步通知方式。

驱动的基本技能:中断、休眠、唤醒、poll 等机制。这些基本技能是驱动开发的基础,其他大型驱动复杂的地方是它的框架及设计思想,但是基本技术就这些。

APP 开发的基本技能:阻塞 、非阻塞、休眠、poll、异步通知。


APP 读取按键的 4 种方法

1.查询方式

2.休眠-唤醒方式

3.poll 方式

4.异步通知方式

第 2、3、4 种方法,都涉及中断服务程序。中断,就像小孩醒了会哭闹一样,中断不经意间到来,它会做某些事情:唤醒 APP、向 APP 发信号。所以,在按键驱动程序中,中断是核心。实际上,中断无论是在单片机还是在 Linux 中都很重要。在 Linux 中,中断的知识还涉及进程、线程等。


查询方式

581f0ac697fb4fa898746562aa2dcd8a.png

工作过程:

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

open,read 函数。APP 调用 open 时,导致驱动中对应的 open 函数被调用,在里面配置 GPIO 为输入引脚。APP 调用 read 时,导致驱动中对应的 read 函数被调用,它读取寄存器,把引脚状态直接返回给 APP。


休眠唤醒方式

47b60df834a04f3b871cf4de96e44111.png

工作过程:

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

open,read 函数。

◼ APP 调用 open 时,导致驱动中对应的 open 函数被调用,在里面配置

GPIO 为输入引脚;并且注册 GPIO 的中断处理函数。

◼ APP 调用 read 时,导致驱动中对应的 read 函数被调用,如果有按键

数据则直接返回给 APP;否则 APP 在内核态休眠。

当用户按下按键时,GPIO 中断被触发,导致驱动程序之前注册的中断服务

程序被执行。它会记录按键数据,并唤醒休眠中的 APP。

APP 被唤醒后继续在内核态运行,即继续执行驱动代码,把按键数据返回给

APP(的用户空间)。


poll方式

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

永远休眠。

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

e65bd885a61644d9a91b564ef970609f.png

工作过程:

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

open,read,poll 函数。

◼ APP 调用 open 时,导致驱动中对应的 open 函数被调用,在里面配置

GPIO 为输入引脚;并且注册 GPIO 的中断处理函数。

◼ APP 调用 poll 或 select 函数,意图是“查询”是否有数据,这 2 个

函数都可以指定一个超时时间,即在这段时间内没有数据的话就返回

错误。这会导致驱动中对应的 poll 函数被调用,如果有按键数据则直

接返回给 APP;否则 APP 在内核态休眠一段时间。

当用户按下按键时,GPIO 中断被触发,导致驱动程序之前注册的中断服务

程序被执行。它会记录按键数据,并唤醒休眠中的 APP。

如果用户没按下按键,但是超时时间到了,内核也会唤醒 APP。

所以 APP 被唤醒有 2 种原因:用户操作了按键,超时。被唤醒的 APP 在内核

态继续运行,即继续执行驱动代码,把“状态”返回给 APP(的用户空间)。

APP 得到 poll/select 函数的返回结果后,如果确认是有数据的,则再调

用 read 函数,这会导致驱动中的 read 函数被调用,这时驱动程序中含有数据,会直接返回数据。


异步通知方式

188d10cfdb4b42a7ab543c0abe7103d2.png

异步通知的实现原理是:内核给 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 会继续执行原先被打断的代码。


驱动程序提供能力,不提供策略

我们的驱动程序可以实现上述 4 种提供按键的方法,但是驱动程序不应该限

制 APP 使用哪种方法。

这就是驱动设计的一个原理:提供能力,不提供策略。就是说,你想用哪种

方法都行,驱动程序都可以提供;但是驱动程序不能限制你使用哪种方法。


目录
相关文章
|
Linux
linux系统中APP读取按键的几种方式
本文以App读取按键的值,来梳理linux驱动中的中断,休眠,唤醒,poll以及异步通知机制。
247 0
|
Ubuntu Linux 开发工具
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十三)APP怎么读取按键值
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十三)APP怎么读取按键值
208 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十三)APP怎么读取按键值
|
Web App开发 Java 程序员
Android App监听软键盘按键的三种方式(转)
最近有类似需求,在csdn上刚好发现,粘贴过来,以防止忘记喽 前言:   我们在android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的“GO”按键加载url页面;在点击搜索框的时候,点击右下角的search符号键可以进行搜索;或者在全部数据输入完毕后,点击右下角的"done"就马上进行下一步操作。
1856 0
|
2月前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
685 7
|
2月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
743 1
|
3天前
|
供应链 搜索推荐 API
1688APP原数据API接口的开发、应用与收益(一篇文章全明白)
1688作为全球知名的B2B电商平台,通过开放的原数据API接口,为开发者提供了丰富的数据资源,涵盖商品信息、交易数据、店铺信息、物流信息和用户信息等。本文将深入探讨1688 APP原数据API接口的开发、应用及其带来的商业收益,包括提升流量、优化库存管理、增强用户体验等方面。
26 6
|
4天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
26 3
|
10天前
|
移动开发 小程序 PHP
校园圈子论坛系统采取的PHP语音和uni账号开发的小程序APP公众号H5是否只需要4800元?是的,就是只需要4800元
关于校园圈子论坛系统采用PHP语言和uni-app开发的小程序、APP、公众号和H5是否仅需4800元这个问题,实际上很难给出一个确定的答案。这个价格可能受到多种因素的影响
40 8
|
6天前
|
人工智能 小程序 数据处理
uni-app开发AI康复锻炼小程序,帮助肢体受伤患者康复!
近期,多家康复机构咨询AI运动识别插件是否适用于肢力运动受限患者的康复锻炼。本文介绍该插件在康复锻炼中的应用场景,包括康复运动指导、运动记录、恢复程度记录及过程监测。插件集成了人体检测、姿态识别等功能,支持微信小程序平台,使用便捷,安全可靠,帮助康复治疗更加高效精准。
|
27天前
|
人工智能 小程序 搜索推荐
uni app下开发AI运动小程序解决方案
本文介绍了在小程序中实现AI运动识别的解决方案。该方案依托于UNI平台,通过高效便捷的插件形式,实现包括相机抽帧控制、人体识别、姿态识别等在内的多项功能,无需依赖后台服务器,大幅提高识别效率和用户体验。方案内置多种运动模式,支持自定义扩展,适用于AI健身、云上赛事、AI体测等多场景,适合新开发和存量改造项目。

热门文章

最新文章

下一篇
DataWorks