有限状态机的嵌入式Linux按键驱动设计
这里的定时函数使用了Linux的内核定时器。使用内核定时器可以方便地实现每个状态的特定定时时间,并且安全释放CPU,提高CPU的效率。程序的基本思路是,首先按键被按下进入按键中断服务程序buttons_interrupt(),在中断服务程序里确定按键状态是否为初始态。如果是,则进行kbd_timer初始化且使按键状态转为消抖状态。当kbd_timer定时到以后,按键检测按键状态是否仍处于按下时转换状态为按键确定状态,如果不是则恢复初始态。当定时器1 s到达后,判断按键是否仍是按下。如是则转换为连发状态,否则恢复初始态。当0.5 s到达后,重新判断按键是否仍是按下。如是,则继续为连发状态,输出值加10;如果按键抬起,则恢复初始态。
4 实验结果
该驱动程序经过gcc-arm-liunx-3.4.4编译,并在Micro2440SDK开发板上运行(开发板上的系统版本为linux2.6.13),运行结果如图3所示。
从运行结果可以看出,如果按下按键并在1 s抬起,输出值每次只加1;如果按下按键超过1 s,系统的输出值每隔0.5s将加10。说明本驱动运行正常,且具有了连发功能。
结 语
本文主要分析了按键有限状态机的工作过程,并利用Liunx内核定时器实现了状态机的状态转换时间间隔,最后给出了基于有限状态机的具有连发功能Linux驱动编写代码,实现了具有连发功能的按键驱动,为基于有限状态机的按键驱动提供了一种解决思路。 linux操作系统文章专题:linux操作系统详解(linux不再难懂)
评论