《现代电子技术》2006年第24期摘录:2006年第24期总第239于
-
如发现有乱码,请点击下面链接浏览原文
正文摘录:
2006年第24期总第239于PMP,PDA等嵌人式手持设备来说往往需要多键齐按功能,如游戏功能以及其他一些需要复合键支持的应用程序。另外对于键盘事件,除了给上层应用提供标准的键值接口和按下抬起标志外,还提供了表示此次键盘是否长按(现在规定键按下超过2s就是长按)的标志,这样为应用程序提供了更丰富的底层驱动支持。对于多键齐按,主要是利用按下抬起标志,在线程中做了一些设计。如图4所示:图4线程工作流程图线程唤醒后,先进行扫描程序,如果不是抖动则得到此次扫描的键值并且添加到队列中。一次完整的按键事件应该包括按下和抬起2个部分,当某个按键按下还没有抬起时又有其他按键按下,这时就不需要中断来唤醒线程,因为只要有一个键没有抬起线程就一直会循环扫描键盘事件,故其他按键事件也能被捕捉到并加入等待队列中。通过kdc—pressed口和kdc:一laststatus[](表示键盘前一时刻状态)的比较来判断是否有事件发生,只要有事件发生,就每隔50ms读一次键值及其状态。不管键按下还是抬起,都当作一次事件发生。只要某键当前状态跟过去状态不一致,就得到此键的键值及其状态。软件中使用了一个环形等待队列,最多容纳16次键盘事件,供应用程序读取,从而解决了对多键齐按事件的响应。当所有按键都已抬起,KT线程就会结束循环并被阻塞。对于长按事件响应,当有键按下,在中断例程中记下此时的系统时间。嵌入式Linux中只要保存jifties这样一个系统滴嗒数。判断长按事件是在抬起时进行,当键抬起时比较此时系统时间jiffies与先前记下的jifties差值时间是否超过2s,如是就认为一次长按事件,并置位长按标志,然后将此抬起事件得到的结果添加到等待队列。4结语本文介绍了基于PxA255平台和嵌入式I。inux的一种矩阵键盘硬件原理和设备驱动的开发应用,目前,此设计已经成功用于多款嵌入式手持设备,事实证明该方案在一定的要求下完全符合性能要求。参考文献[1]IntelCorporation.IntelPXA255ProcessorI)eveloper’’s。Manual[S].2003.[2]AlessandroRubini~LJonathanC0rbet.Linux设备驱动程序[M].魏永明,骆刚,姜君,译.北京:中国电力出版社,2002.[3]毛德操,胡希明.嵌人式系统——采用公开源代码和strong—ARM/XS~:ale处理器[M].杭州:浙江大学出版社,2003.[4]黎爱琼,陈宗林,谈宏华.基于Ll‘nux操作系统下串口调试助手的设计[J].现代电子技术,2006,29(16):88—90.
阅读此文(图):
点击此处在线翻阅