这几天一直在忙的一个项目中有一小部分是对机械按键的操作,在准备些BSP的时候突然想起来以前在大学
常用的处理方法就是按键消抖然后识别,待消抖最后弹起,并且所有的消抖程序段都是依靠延时程序实现。
可能很多人对该函数的使用并不排斥,但是我个人觉得这是非常不符合软件的本质的,并且也并不合理。
软件的本质是将现实中的各种行为抽象。以现实中人的活动为例,人在同一时刻是可以实时响应很多事情的,
而Delay函数的出现相当于将CPU进行软件暂停而对实时的任务拒之门外(中断除外),这在很多对任务的
执行时间有着严格要求的场合是难以忍受的。并且糟糕的是,系统任务越多,Delay函数的影响越大。那难
倒就没有了别的解决办法了吗?其实答案就在μ/COSii里。
在实时操作系统里有一个概念叫信号量,用来处理不同事件状态的查询或者对不同任务队同一资源的请求。
标志,该时间标志位在50微秒(暂定)的定时器中断中递增,当达到计时时间要求后就传递给响应的需要延
时的任务,然后该变量清零。
我们以按键的识别为例,在实际按键按下以后,需要等待按键可靠弹起,一般来说在一定时间内如果按键
借用操作系统的思路是用标志位进行间隔扫描状态,这样可以精确的判断按键的状态。详细示意图如下所示:
![按键扫描示意图](https://img-blog.csdn.net/20150817223738086)
以下是编写的BSP程序(基于DSP C2000)
/*******************************************************************************
*
* -------------------------
* Details to create profits
*
* All rights reserved.
* Contact information:V1.0
* QQ: 836002276
* e-mail: 836002276@qq.com
*******************************************************************************/
/******************************************************************************
* 本文件实现了Key.c文件