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以及异步通知机制。
260 0
|
Ubuntu Linux 开发工具
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十三)APP怎么读取按键值
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十三)APP怎么读取按键值
214 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十三)APP怎么读取按键值
|
Web App开发 Java 程序员
Android App监听软键盘按键的三种方式(转)
最近有类似需求,在csdn上刚好发现,粘贴过来,以防止忘记喽 前言:   我们在android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的“GO”按键加载url页面;在点击搜索框的时候,点击右下角的search符号键可以进行搜索;或者在全部数据输入完毕后,点击右下角的"done"就马上进行下一步操作。
1871 0
|
3月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
845 1
|
11天前
|
开发框架 小程序 前端开发
圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
本文介绍了圈子社交APP的源码获取、分析与定制,PHP实现的圈子框架设计及代码编写,以及圈子小程序的安装搭建。涵盖环境配置、数据库设计、前后端开发与接口对接等内容,确保平台的安全性、性能和功能完整性。通过详细指导,帮助开发者快速搭建稳定可靠的圈子社交平台。
116 18
|
7天前
|
JSON 供应链 搜索推荐
淘宝APP分类API接口:开发、运用与收益全解析
淘宝APP作为国内领先的购物平台,拥有丰富的商品资源和庞大的用户群体。分类API接口是实现商品分类管理、查询及个性化推荐的关键工具。通过开发和使用该接口,商家可以构建分类树、进行商品查询与搜索、提供个性化推荐,从而提高销售额、增加商品曝光、提升用户体验并降低运营成本。此外,它还能帮助拓展业务范围,满足用户的多样化需求,推动电商业务的发展和创新。
26 5
|
7天前
|
移动开发 安全 搜索推荐
圈子社交系统APP,同城本地圈子论坛开发,让身边的人沟通更加紧密
圈子社交系统APP是一款基于社交网络的移动应用,用户可创建、加入和管理兴趣圈子。主要功能包括:动态分享与交流、实时聊天、会员体系与身份认证、活动策划等。该APP注重个性化定制、社交关系深化、隐私安全及跨平台互联,提供丰富的社交体验。
|
10天前
鸿蒙语言开发 几十套鸿蒙ArkTs app毕业设计及课程作业
鸿蒙语言开发 几十套鸿蒙ArkTs app毕业设计及课程作业
18 1
|
19天前
|
JSON 缓存 前端开发
HarmonyOS NEXT 5.0鸿蒙开发一套影院APP(附带源码)
本项目基于HarmonyOS NEXT 5.0开发了一款影院应用程序,主要实现了电影和影院信息的展示功能。应用包括首页、电影列表、影院列表等模块。首页包含轮播图与正在热映及即将上映的电影切换显示;电影列表模块通过API获取电影数据并以网格形式展示,用户可以查看电影详情;影院列表则允许用户选择城市后查看对应影院信息,并支持城市选择弹窗。此外,项目中还集成了Axios用于网络请求,并进行了二次封装以简化接口调用流程,同时添加了请求和响应拦截器来处理通用逻辑。整体代码结构清晰,使用了组件化开发方式,便于维护和扩展。 该简介概括了提供的内容,但请注意实际开发中还需考虑UI优化、性能提升等方面的工作。
78 11
|
16天前
|
前端开发 数据库 UED
uniapp开发,前后端分离的陪玩系统优势,陪玩app功能特点,线上聊天线下陪玩,只要4800
前后端分离的陪玩系统将前端(用户界面)和后端(服务器逻辑)分开开发,前者负责页面渲染与用户交互,后者处理数据并提供接口。该架构提高开发效率、优化用户体验、增强可扩展性和稳定性,降低维护成本,提升安全性。玩家可发布陪玩需求,陪玩人员发布服务信息,支持在线聊天、预约及线下陪玩功能,满足多样化需求。[演示链接](https://www.51duoke.cn/games/?id=7)

热门文章

最新文章