按键驱动的恩恩怨怨之概述

转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/23946487

研究按键驱动已经有几天了,尽管是0基础的驱动,可是当中包括的知识确实不少。接下来的几篇文章我会分别从浅入深的分析按键驱动。希望能对大家有所帮助。因为屌丝博主也是初学,当中出现错误在所难免,希望大家批评指正。一起交流。

按键驱动属于字符型设备驱动,至于具体什么是字符型设备驱动和基础知识云云的我就不具体介绍了,大家也能够看我之前写的LED驱动那篇介绍的比較具体一点。

这里主要说下接下来几篇要将的内容:

1.按键驱动的恩恩怨怨之查询方式

查询法不用多说,当年玩单片机的时候最经常使用的一种方法。话说当年用的还挺顺手(亲还记得当年那个大while(1)循环吗?),可是当你用查询法写驱动的时候你会发现,资源浪费。CPU资源严重浪费。

2.按键驱动的恩恩怨怨之中断方式

相比于中断方式的按键驱动,要比查询法好的多。由于在CPU没有检測到按键的时候CPU会进入休眠状态(嘛叫休眠?为啥休眠?不休眠行不行?)非常多问题将在这节里面解答。

3.按键驱动的恩恩怨怨之poll方式

poll方式又是一种新的方式,他的目的就是一句话:指定时间查询是否有按键,没有就返回。刚接触概念机制又一大堆。没关系这节我们将从内核中寻找答案。

4.按键驱动的恩恩怨怨之异步通知

说起异步通知,简单点的理解就是:曾经都是应用程序主动看按键是否按下云云的。。。这回应用程序架子大了。说老子才不去呢。把任务给了驱动。然后驱动发现按键按下,屁颠屁颠的去通知应用程序。

5.按键驱动的恩恩怨怨之同步相互排斥堵塞

这篇里面涉及的新的概念可能有点多,一时半会可能消化不了,没关系慢慢来。举个样例,当你打开一个文件的时候,还有还有一个人要打开文件。而且你没打开完。因为内核是抢占式的,所以将先服务还有一个人,然后再服务你。你感觉非常不爽。明明老子先要打开的,你凭啥服务后来的那个小子。所以就引出了本篇的原子操作与信号量。本篇还将介绍堵塞操作。

6.按键驱动的恩恩怨怨之防抖动

防抖动这个词,对于玩过单片机的小伙伴们并不陌生。当年第一次写单片机的时候可定会发生这样的情况。你明明按下去一次,但是却像是按下去了好多次。当年的解决防抖动的办法就是延时。如今玩嵌入式了也一样。仅仅只是更加高级了。我们用的是定时器延时操作,具体怎么解决具体分析见文章。

结尾:这个系列和韦东山的第一期视频文件夹吻合。当中部分也有些參考。本系列还參考了LDD3。和互联网上的其它的一些资料。详细參考我会在结尾进行注明。

时间: 2024-10-12 08:57:56

按键驱动的恩恩怨怨之概述的相关文章

按键驱动的恩恩怨怨之防抖动

转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/24540403 一.驱动代码 #include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/init.h> #include <linux/delay.h> #include <linux/irq.h>

OSAL之按键驱动

本博文根据协议栈1.3.2,尊重原创,注明出处,欢迎转载 学习按键驱动的主要有两大块: 第一:按键引脚设置: 第二:按键事件的触发检测与轮询,以及按键消息的发送 先说明第一大块,按键引脚设置, 超出cc2540片子从机的按键两个按键,按键是共地.所以它的触发方式是下降沿触发按键中断,同时程序对按键按下这个动作检测是中断方式检测,一旦有按键按下,触发一个按键轮询函数执行,同时把对按键的检测方式换成轮询模式.所以对按键引脚设置的内容也就出来了.主要一下几个方面: 1.设置按键映射到的物理引脚GPIO

linux系统下标准GPIO按键驱动

前言: linux下platform平台驱动是为了方便隔离bsp与driver,利于移植.体现好代码的高内聚,低耦合.Linux设备驱动模型中,关心总线,设备和驱动三个实体.总线将设备和驱动绑定.在系统每注册一个设备的时候,都会寻找与之相匹配的驱动,相反的,每加载一个驱动的时候,也会寻找与之匹配的设备.匹配由总线完成.linux发明了一种虚拟的总线,称之为platform总线,相应的设备称之为platform_device,驱动为platform_driver. 基于这个模型,又根据面向对象的思

入门级的按键驱动——按键驱动笔记之poll机制-异步通知-同步互斥阻塞-定时器防抖

文章对应视频的第12课,第5.6.7.8节. 在这之前还有查询方式的驱动编写,中断方式的驱动编写,这篇文章中暂时没有这些类容.但这篇文章是以这些为基础写的,前面的内容有空补上. 按键驱动——按下按键,打印键值: 目录 概要 poll机制 异步通知 同步互斥阻塞 定时器防抖 概要: 查询方式: 12-3 缺点:占用CPU99%的资源.中断方式:12-4 缺点:调用read函数后如果没有按键按下,该函数永远不会结束,一直在等待按键按下. 优点:使用到了休眠机制,占用cpu资源极少.poll机制: 1

第三十四天:按键驱动与蜂鸣器驱动以及MMU

编写按键驱动的过程和编写LED灯的驱动类似.区别在于按键是在底板上的.要从底板的电路图开始看.   使用key为关键字查找电路图: 可以得知的信息:按键松开时候XEINT26为高电平.按下时候为底电平.所以要判断按键是否被按下,就要检测XEINT26的状态. 使用XEINT26为关键字,在核心板上查看其定义.找到下图: XEINT26在核心板上链接到GPX3_2上.然后就是去datasheet中查找GPX3_2的说明了. 按键为检测,GPX3CON置0,GPX3DAT置1,表示按键被按下.代码如

ARM Linux 驱动Input子系统之按键驱动测试

上一篇已经谈过,在现内核的中引入设备树之后对于内核驱动的编写,主要集中在硬件接口的配置上了即xxxx.dts文件的编写. 在自己的开发板上移植按键驱动: 1.根据开发板的原理图 确定按键的硬件接口为:GPIO2_2.GPIO2_3.GPIO2_5.GPIO0_30. 修改dts文件使其与原理图的按键接口一致. gpio_buttons: [email protected]0 { compatible = "gpio-keys"; #address-cells = <1>;

11.按键驱动之定时器防抖(详解)

本节目标: 通过定时器来防止按键抖动,测试程序是使用上节的:阻塞操作的测试程序 1.如下图所示,在没有定时器防抖情况下,按键没有稳定之前会多次进入中断,使得输出多个相同信息出来 2.按键波形图,如下所示: 3.如何消去按键抖动 通过定时器延时10ms,然后每当按键进入中断时就更新定时器延时10ms,若延时10ms到了说明已经过了抖动范围,然后再打印按键电平信息 4.定时器结构体和函数介绍 我们先来看看两个全局变量: jiffies: 是系统时钟,全局变量,默认每隔10ms加1 HZ:是每S的频率

【转】s3c2440 按键驱动 — 字符设备

原文网址:http://www.xuebuyuan.com/632893.html 主机:VM - redhat 9.0 开发板:FL2440,linux-2.6.12 arm-linux-gcc:3.4.1 (1)原理图上的按键模块,可以看到相应的GPIO口,以及中断号. 由图可以得知GPF0等接高电平,当按键按下,则接低电平,所以将中断响应设置为下降沿触发. (2)驱动程序gzliu_2440_key.c,实现为一般的字符设备驱动,完整的源码如下,其中: // 定时器的使用参考:http:/

Linux设备驱动之button按键驱动学习与小结

button按键驱动,相对于前面的LED驱动来说.增加了中断服务程序以及等待队列等新知识点. 先上学习的驱动代码. 内核:linux3.0 板子:fl2440 /********************************************************************************* * Copyright: (C) 2011 Guo Wenxue<[email protected]> * All rights reserved. * * Filenam