linux系统中APP读取按键的几种方式

简介: 本文以App读取按键的值,来梳理linux驱动中的中断,休眠,唤醒,poll以及异步通知机制。

应用程序读取按键的方式


  • 查询方式:实时查询


  • 休眠-唤醒方式:无数据休眠,有数据唤醒


  • poll方式:设置超时机制,在设置时间,有数据返回,无数据休眠,超时后直接返回无数据状态


  • 初步通知方式:内核主动通知用户有数据


这几种方式没有优劣之分,在不同的场合使用不同的方式。


查询方式


image.png


  • 构造一个file_operations结构体


  • drv_open配置GPIO为输入模式


  • drv_read返回预设状态


  • APP直接通过调用读取,导致驱动中的读取函数被调用,返回初始的状态


休眠唤醒方式


image.png


  • 构造一个file_operations结构体


  • drv_open配置GPIO为中断模式


  • drv_read有按键数据,直接返回给APP;否则内核态休眠


  • 当用户点击按键时,GPIO中断被触发,导致驱动程序之前注册的中断服务程序被执行,它会记录按键数据,并唤醒休眠中的APP


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


poll方式


上面的休眠-唤醒方式有一个缺点:如果用户一直没有操作按键,那么APP将永远休眠。我们可以给APP定个闹钟,这就是poll方式。


image.png


  • 构造一个file_operations结构体,提供对应的open,read,poll函数


  • 这两个函数可以设置一个超时时间,即在这段时间没有数据的话就返回错误。这会导致驱动中的poll或者选择被调用。如果有按键数据则直接返回按键数据给APP,否则APP在内核态休眠移动时间


  • 当用户点击按键时,GPIO触发中断,导致驱动中的中断服务程序被执行,记录按键数据,同时唤醒休眠中的APP


  • 如果用户没有按键,超时了内核也会唤醒APP


  • APP得到投票/选择函数返回结果后,如果确认有数据,则在调用中读取。


异步通知


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


image.png


  • 构造一个file_operations结构体,提供对应的open,read,fasync函数


  • APP给信号注册自己的信号处理函数


  • APP调用fcntl函数,把驱动程序的标志设置为FASYNC,这会导致驱动程序的fasync函数被调用,它只是简单的记录进程PID


  • 当用户点击按键后,GPIO中断触发,导致驱动中中断服务处理程序被调用,记录按键数据,然后给进程PID发送SIGIO信号


  • APP收到信号后,会被打断,先执行信号处理函数:在信号处理函数中调用读取函数,读取按键值。


  • 信号处理函数返回,继续执行后续的代码


总结


以上介绍了多种方式处理读取按键值,提供不同的策略,没有好坏之分。

相关文章
|
4天前
|
存储 缓存 监控
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
112 78
|
8天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
39 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
4天前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
43 13
|
4天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
22 3
|
10天前
|
移动开发 小程序 PHP
校园圈子论坛系统采取的PHP语音和uni账号开发的小程序APP公众号H5是否只需要4800元?是的,就是只需要4800元
关于校园圈子论坛系统采用PHP语言和uni-app开发的小程序、APP、公众号和H5是否仅需4800元这个问题,实际上很难给出一个确定的答案。这个价格可能受到多种因素的影响
40 8
|
13天前
|
缓存 移动开发 小程序
uni-vue3-wetrip自创跨三端(H5+小程序+App)酒店预订app系统模板
vue3-uni-wetrip原创基于vite5+vue3+uniapp+pinia2+uni-ui等技术开发的仿去哪儿/携程预约酒店客房app系统。实现首页酒店展示、预订搜索、列表/详情、订单、聊天消息、我的等模块。支持编译H5+小程序+App端。
50 8
毋庸置疑,就是要买好的上门家政APP系统!
在家政APP平台建设中,选择合适的家政系统至关重要。它直接影响平台的运营与未来发展。以低价为唯一标准选择系统,可能因质量问题导致重大损失。应注重系统的质量与适应性,确保平台稳定运行,支持市场快速变化的需求。
|
25天前
|
传感器 iOS开发 UED
探索iOS生态系统:从App Store优化到用户体验提升
本文旨在深入探讨iOS生态系统的多个方面,特别是如何通过App Store优化(ASO)和改进用户体验来提升应用的市场表现。不同于常规摘要仅概述文章内容的方式,我们将直接进入主题,首先介绍ASO的重要性及其对开发者的意义;接着分析当前iOS平台上用户行为的变化趋势以及这些变化如何影响应用程序的设计思路;最后提出几点实用建议帮助开发者更好地适应市场环境,增强自身竞争力。
|
4天前
|
Ubuntu Linux C++
Win10系统上直接使用linux子系统教程(仅需五步!超简单,快速上手)
本文介绍了如何在Windows 10上安装并使用Linux子系统。首先,通过应用商店安装Windows Terminal和Linux系统(如Ubuntu)。接着,在控制面板中启用“适用于Linux的Windows子系统”并重启电脑。最后,在Windows Terminal中选择安装的Linux系统即可开始使用。文中还提供了注意事项和进一步配置的链接。
17 0
|
16天前
|
存储 Oracle 安全
服务器数据恢复—LINUX系统删除/格式化的数据恢复流程
Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs) 下删除或者格式化的数据恢复流程和可行性。
下一篇
DataWorks