2013年(7)
分类: C/C++
2013-05-10 11:55:27
在现在程序设计中,到处都可以看到“缓冲区”这个词。那么在程序中使用了缓冲区有什么效果呢?
我们用一个例子来说明缓冲区到底是怎么回事,当电脑卡的时候打字,那么打的字会延后才能打出来。这就是典型的缓冲区,在键盘中存在一个小芯片,设置了一段空间大小的(先进先出)队列,当有按键按下,那么就会触发中断,判断到按键按下,把键值写入到队列中,电脑CPU只须要从这个队列中读出数据就才,电脑不会算键盘是如何获取到键值的。
我们在设计单片机程序的时候,也可以用这个思想,当按键触发了后将数据写入到一个队列中,须要获取键值的时候就直接从队列中取出,这样写有一个好处就是将按键到获取键值的分为了独立两个部分,我们可以将这两部分称为前后台程序。这里有必要说下在单片机中前后台程序是怎么回事。
前台程序:在主程序中while(1)无限循环的部分。
后台程序:在中断中的程序。
状态机的设计思想和传统的流程图的思想是不太一样的,用状态机的一个例子和流程图的例子来说明状态机的优点吧。
假设在一个系统中两个按键代表两种分枝情况,假如用流程图方式表达出来的话,到第2次按下就是要设计出4种可能情况,第3次按下设计出8种可能情况,依次下去将是一个非常庞大的数据。而用状态机的话,只判系统现在是什么状态,当一个按键按下,转为什么状态就行。以图是一个电机转动的状态图。
我的按键状态机程序如下:
点击(此处)折叠或打开