国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

嵌入式開發(fā)過程中按鍵檢測(cè)算法的改進(jìn)

2014-08-12 08:46:15鄭玉章徐愛鈞
關(guān)鍵詞:狀態(tài)機(jī)按鍵嵌入式

鄭玉章,徐愛鈞

(長江大學(xué) 電子信息學(xué)院,荊州 434023)

嵌入式開發(fā)過程中按鍵檢測(cè)算法的改進(jìn)

鄭玉章,徐愛鈞

(長江大學(xué) 電子信息學(xué)院,荊州 434023)

為了解決嵌入式系統(tǒng)開發(fā)過程中,傳統(tǒng)按鍵檢測(cè)算法將單片機(jī)的資源全部用來做按鍵掃描,從而使CPU的利用率大大降低的問題。在傳統(tǒng)按鍵檢測(cè)算法的基礎(chǔ)上,提出了一種基于有限狀態(tài)機(jī)(FSM)的按鍵檢測(cè)程序算法。為了驗(yàn)證基于FSM的按鍵檢測(cè)程序算法較傳統(tǒng)算法的優(yōu)勢(shì),在Keil uVison3集成開發(fā)壞境下,將兩種算法做了性能分析。通過性能分析窗口,可以看出新算法在CPU利用率方面得到了大大的提高。

嵌入式開發(fā);按鍵檢測(cè);FSM算法;Keil uVision3

引 言

在嵌入式系統(tǒng)中,按鍵和鍵盤是一種基本和常用的接口,它是構(gòu)成人機(jī)對(duì)話通道的一種常用方式。按鍵和鍵盤能實(shí)現(xiàn)向嵌入式系統(tǒng)輸入數(shù)據(jù)、傳輸命令等功能,是人工干預(yù)、設(shè)置和控制系統(tǒng)運(yùn)行的主要手段。眾所周知,傳統(tǒng)的按鍵接口程序采用軟件延時(shí)來檢測(cè)按鍵輸入,這種算法不僅使MCU的效率大大降低,而且也不容易同系統(tǒng)中其他功能模塊協(xié)調(diào)工作,系統(tǒng)的實(shí)時(shí)性極差。

除非當(dāng)前系統(tǒng)搭載了實(shí)時(shí)操作系統(tǒng),比如μC/OS-II,一旦當(dāng)前任務(wù)要進(jìn)行延時(shí)操作,系統(tǒng)就會(huì)自動(dòng)進(jìn)行任務(wù)調(diào)度,執(zhí)行其他任務(wù),當(dāng)之前的任務(wù)延時(shí)完畢,系統(tǒng)會(huì)自動(dòng)執(zhí)行之前的任務(wù)。遺憾的是單片機(jī)系統(tǒng)資源有限,不適合搭載μC/OS-II實(shí)時(shí)操作系統(tǒng),另外μC/OS-II用在商業(yè)上是要收費(fèi)的,這又間接增加了系統(tǒng)開發(fā)的成本。因此本文針對(duì)以上不足,在不搭載實(shí)時(shí)操作系統(tǒng)的前提下提出一種新的算法來編寫鍵盤和按鍵接口的處理程序。實(shí)驗(yàn)表明該算法能夠極大地提高CPU的利用率,在實(shí)際產(chǎn)品設(shè)計(jì)中具有一定的實(shí)用性。

1 研究背景

嵌入式系統(tǒng)開發(fā)過程中,無論是針對(duì)低端的8051系列、AVR系列8位單片機(jī),還是TI的MSP430系列16位單片機(jī),亦或是更為高端的ARM、DSP,總是少不了通過按鍵完成人與微處理器直接的對(duì)話工作,即所謂的“人機(jī)交互”。

由于按鍵的開關(guān)為機(jī)械彈性觸點(diǎn)開關(guān),加上人們按鍵時(shí)的力度、方向的不同,按鍵開關(guān)從按下到接觸穩(wěn)定要經(jīng)過數(shù)ms級(jí)的彈跳抖動(dòng),即在按下的幾十ms時(shí)間里,會(huì)連續(xù)產(chǎn)生多個(gè)脈沖。釋放按鍵時(shí),電路也不會(huì)一下斷開,同樣會(huì)產(chǎn)生抖動(dòng)。因此,為了確保MCU對(duì)一次按鍵動(dòng)作只確認(rèn)一次,在保證系統(tǒng)具有較好實(shí)時(shí)性的前提下,必須要進(jìn)行消抖處理。

為了解決以上問題,人們進(jìn)行了大量的研究,在硬件和軟件方面都下了不少功夫,在硬件方面有人提出采用R-S觸發(fā)器或RC積分電路,但是在硬件設(shè)計(jì)上增加了系統(tǒng)的成本;在軟件方面有人提出采用中斷輸入按鍵接口,的確能夠提高系統(tǒng)實(shí)時(shí)性,但是不能解決消抖問題,還是會(huì)出現(xiàn)輸入控制不穩(wěn)定的現(xiàn)象。因此,在考慮節(jié)約成本的情況下,提出一種新的軟件算法來解決上述問題具有實(shí)際意義。

2 研究方法

2.1 有限狀態(tài)機(jī)分析設(shè)計(jì)的基本原理

有限狀態(tài)機(jī)(FSM)是實(shí)時(shí)系統(tǒng)設(shè)計(jì)中的一種數(shù)學(xué)模型,是一種重要的、易于建立的、應(yīng)用比較廣泛的、以描述控制特性為主的建模方法,它可以應(yīng)用于從系統(tǒng)分析到設(shè)計(jì)(包括硬件、軟件)的所有階段。

很多實(shí)時(shí)系統(tǒng),特別是實(shí)時(shí)控制系統(tǒng),其整個(gè)系統(tǒng)的分析機(jī)制和功能與系統(tǒng)的狀態(tài)有相當(dāng)大的關(guān)系。有限狀態(tài)機(jī)由有限的狀態(tài)和相互之間的狀態(tài)轉(zhuǎn)移構(gòu)成,在任何時(shí)候只能處于給定數(shù)目的狀態(tài)中的一個(gè)。當(dāng)接收到一個(gè)輸入事件時(shí),狀態(tài)機(jī)產(chǎn)生一個(gè)輸出,同時(shí)也可能伴隨著狀態(tài)的轉(zhuǎn)移。 一個(gè)有限狀態(tài)機(jī)在數(shù)學(xué)上可以描述如下:

① 一個(gè)有限系統(tǒng)狀態(tài)的集合為:

其中:i=1,2,3,…,q。該式表明,系統(tǒng)可能存在的狀態(tài)有q個(gè),而在tk時(shí)刻,系統(tǒng)的狀態(tài)為其中之一Si(唯一性)。

② 一個(gè)有限系統(tǒng)輸入信號(hào)的集合為:

其中:j=1,2,3,…,m,表示系統(tǒng)共有m個(gè)輸入信號(hào)。該式表示在tk時(shí)刻,系統(tǒng)的輸入信號(hào)為輸入集合的全集或子集(集合性)。

③ 一個(gè)狀態(tài)轉(zhuǎn)移函數(shù)F為:

狀態(tài)轉(zhuǎn)移函數(shù)也是一個(gè)狀態(tài)函數(shù),它表示對(duì)于tk時(shí)刻,系統(tǒng)在某一狀態(tài)Si下,相對(duì)給定輸入Ij后,F(xiàn)SM轉(zhuǎn)入該函數(shù)產(chǎn)生的新狀態(tài)。這個(gè)新狀態(tài)就是系統(tǒng)在下一時(shí)刻的狀態(tài),也是唯一確定的(唯一性)。

④ 一個(gè)有限的輸出信號(hào)集合為:

其中:l=1,2,3,…,n,表示系統(tǒng)共有n個(gè)輸入信號(hào)。該式表示在tk時(shí)刻,系統(tǒng)的狀態(tài)為Si時(shí),其輸出信號(hào)為輸出集合的全集或子集(集合性)。這里需要注意的是,系統(tǒng)的輸出只與系統(tǒng)所處的狀態(tài)有關(guān)。

⑤ 時(shí)間序列為:

在狀態(tài)機(jī)中,時(shí)間序列是非常重要的一個(gè)因素,從硬件的角度看,時(shí)間序列如同一個(gè)觸發(fā)脈沖序列或同步信號(hào);而從軟件的角度看,時(shí)間序列就是一個(gè)定時(shí)器。狀態(tài)機(jī)由時(shí)間序列同步觸發(fā),定時(shí)檢測(cè)輸入,根據(jù)當(dāng)前的狀態(tài)輸出相應(yīng)的信號(hào),并確定下一次系統(tǒng)狀態(tài)的轉(zhuǎn)移。在時(shí)間序列進(jìn)入下一次觸發(fā)時(shí),系統(tǒng)的狀態(tài)將根據(jù)前一次的狀態(tài)和輸入情況發(fā)生狀態(tài)的轉(zhuǎn)移。其次,時(shí)間序列可能是一個(gè)系統(tǒng)的輸入信號(hào),影響到狀態(tài)的改變,進(jìn)而影響到系統(tǒng)的輸出。所以對(duì)于時(shí)間序列,正確分析和考慮選擇合適的時(shí)間段的間隔也是非常重要的。若間隔太短,對(duì)系統(tǒng)的速度、頻率響應(yīng)要求高,并且可能降低系統(tǒng)的效率;若間隔太長,系統(tǒng)的實(shí)時(shí)性差,響應(yīng)慢,還有可能造成外部輸入信號(hào)的丟失。一般情況下,時(shí)間序列的時(shí)間間隔的選取,應(yīng)稍微小于外部輸入信號(hào)中變化最快的周期值。

通常主要有兩種方法來建立有限狀態(tài)機(jī),一種是“狀態(tài)轉(zhuǎn)移圖”,另一種是“狀態(tài)轉(zhuǎn)移表”,分別用圖形方式和表格方式建立有限狀態(tài)機(jī)。實(shí)時(shí)系統(tǒng)經(jīng)常會(huì)應(yīng)用在比較大型的系統(tǒng)中,這時(shí)采用圖形或表格方式對(duì)理解復(fù)雜的系統(tǒng)具有很大的幫助??偟膩碚f,有限狀態(tài)機(jī)的優(yōu)點(diǎn)在于簡(jiǎn)單易用,狀態(tài)間的關(guān)系能夠直觀看到。應(yīng)用在實(shí)時(shí)系統(tǒng)中時(shí),便于對(duì)復(fù)雜系統(tǒng)進(jìn)行分析。

2.2 基于有限狀態(tài)機(jī)分析的按鍵檢測(cè)程序設(shè)計(jì)

圖1 按鍵狀態(tài)機(jī)轉(zhuǎn)換圖

圖1給出了一個(gè)簡(jiǎn)單按鍵狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換圖。在圖1中,將一次按鍵完整的操作過程分解為3個(gè)狀態(tài),時(shí)間序列周期為10 ms,即每隔10 ms檢測(cè)一次按鍵的輸入信號(hào),并輸出一次按鍵的確認(rèn)信號(hào),同時(shí)按鍵的狀態(tài)也發(fā)生一次轉(zhuǎn)換。 圖1中“狀態(tài)0”為按鍵的初始狀態(tài),當(dāng)按鍵輸入為“1”時(shí),表示按鍵處于開放狀態(tài),輸出“0”(1/0),下一狀態(tài)仍舊為“狀態(tài)0”。當(dāng)按鍵輸入為“0”時(shí),表示按鍵閉合,但輸出還是“0”(0/0)(沒有經(jīng)過消抖,不能確認(rèn)按鍵真正按下),下一狀態(tài)進(jìn)入“狀態(tài)1”。

“狀態(tài)1”為按鍵閉合確認(rèn)狀態(tài),它表示在10 ms前按鍵為閉合狀態(tài),因此當(dāng)再次檢測(cè)到按鍵輸入為“0”時(shí),可以確認(rèn)按鍵被按下了(經(jīng)過10 ms的消抖),輸出“1”表示確認(rèn)按鍵閉合(0/1),下一狀態(tài)進(jìn)入“狀態(tài)2”。而當(dāng)再次檢測(cè)到按鍵的輸入為“1”時(shí),表示按鍵可能處在抖動(dòng)干擾狀態(tài),輸出為“0”(1/0),下一狀態(tài)返回到“狀態(tài)0”。

這樣,利用狀態(tài)1,實(shí)現(xiàn)了按鍵的消抖處理?!盃顟B(tài)2”為等待按鍵釋放狀態(tài),因?yàn)橹挥械劝存I釋放后,一次完整的按鍵操作過程才算完成。 從對(duì)圖1的分析中可以知道,在一次按鍵操作的整個(gè)過程中,按鍵的狀態(tài)是從“狀態(tài)0”→“狀態(tài)1”→“狀態(tài)2”,最后返回到“狀態(tài)0”的。并且在整個(gè)過程中,按鍵的輸出信號(hào)僅在“狀態(tài)1”時(shí)給出了唯一的一次確認(rèn)按鍵閉合狀態(tài)的信號(hào)“1”(其他狀態(tài)均輸出“0”)。所以,上面狀態(tài)機(jī)所表示的按鍵系統(tǒng),不僅解決了按鍵抖動(dòng)的問題,而且也確保在一次按鍵整個(gè)的過程中,系統(tǒng)只輸出一次按鍵閉合信號(hào)(“1”)。

一旦有了正確的狀態(tài)轉(zhuǎn)換圖,就可以根據(jù)狀態(tài)轉(zhuǎn)換圖編寫軟件了。在軟件中狀態(tài)機(jī)的程序結(jié)構(gòu),通常使用多分支結(jié)構(gòu)(IF-ELSEIF-ELSE、CASE等)實(shí)現(xiàn)?;跔顟B(tài)機(jī)方式編寫的簡(jiǎn)單按鍵接口函數(shù)如下:

advanced_read_key(void)

?

#define key_input PIND.7 //按鍵輸入口

#define key_state_0 0

#define key_state_1 1

#define key_state_2 2

?

char advanced_read_key(void) {

static char key_state = 0;

char key_press, key_return = 0;

key_press = key_input; //讀按鍵I/O電平

switch (key_state){

case key_state_0: //按鍵初始態(tài)

if (!key_press) key_state = key_state_1;

//鍵被按下,狀態(tài)轉(zhuǎn)換到按鍵確認(rèn)態(tài)

break;

case key_state_1: //按鍵確認(rèn)態(tài)

if (!key_press){

key_return = 1;

//按鍵仍按下,按鍵確認(rèn)輸出為“1”

key_state = key_state_2;

//狀態(tài)轉(zhuǎn)換到按鍵釋放態(tài)

}

else

key_state = key_state_0;

//按鍵已抬起,轉(zhuǎn)換到按鍵初始態(tài)

break;

case key_state_2:

if (key_press) key_state = key_state_0;

//按鍵已釋放,轉(zhuǎn)換到按鍵初始態(tài)

break;

}

return key_return;

}

3 實(shí)驗(yàn)結(jié)果與分析

在Keil uVision3開發(fā)壞境中提供了性能分析工具,利用該工具,可以了解程序中哪部分的執(zhí)行時(shí)間最長,調(diào)用次數(shù)最多,從而了解影響整個(gè)程序中執(zhí)行的瓶頸。下面將傳統(tǒng)按鍵檢測(cè)算法和改進(jìn)的基于FSM狀態(tài)機(jī)算法的CPU占用率情況通過性能分析窗口給予展示,如圖2、圖3所示。

圖2 傳統(tǒng)按鍵檢測(cè)算法的CPU性能分析圖

圖3 FSM改進(jìn)算法的CPU性能分析圖

結(jié) 語

[1] Jean J Labrose.嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II[M].2版.邵貝貝,等譯.北京:北京航空航天大學(xué)出版社,2012.

[2] 馬潮.AVR單片機(jī)嵌入式系統(tǒng)原理與應(yīng)用實(shí)踐[M].北京:北京航空航天大學(xué)出版社,2011.

[3] 溫子琪.51單片機(jī)C語言創(chuàng)新教程[M].北京:北京航空航天大學(xué)出版社,2011.

[4] Atmel. Atmega16中文手冊(cè).

[5] 宏晶科技STC89C51RC/RD+系列單片機(jī)器件手冊(cè)。

[6] keil Software.keil c51完全中文手冊(cè),2003.

An Improved Key-detection Algorithm During the EmbeddedDevelopment

Zheng Yuzhang, Xu Aijun

(Electronics and Information Engineering,Yangtze University,Jingzhou 434023,China)

In order to solve the problem that traditional key detection algorithms make all MCU resources for key scan so as to reduce CPU utilization during the embedded development, a key detection program algorithm based on the finite state machine (FSM) is proposed on the basis of traditional key detection algorithms. In order to verify the superiority of the button detection program algorithm based on FSM,the performances of two algorithms are analyzed in Keil uVison3.Through the performance analysis window, the new algorithm has been greatly improved in CPU utilization.

embedded development;key detection;FSM algorithm; Keil uVison3

TP273

A

2014-02-21)

猜你喜歡
狀態(tài)機(jī)按鍵嵌入式
基于有限狀態(tài)機(jī)的按鍵檢測(cè)程序設(shè)計(jì)
電子制作(2021年3期)2021-06-16 03:14:26
基于有限狀態(tài)機(jī)的交會(huì)對(duì)接飛行任務(wù)規(guī)劃方法
搭建基于Qt的嵌入式開發(fā)平臺(tái)
嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
一種多方向?qū)Ч獍存I結(jié)構(gòu)設(shè)計(jì)
電子制作(2016年1期)2016-11-07 08:43:05
Altera加入嵌入式視覺聯(lián)盟
倍福 CX8091嵌入式控制器
按鍵的多種狀態(tài)檢測(cè)及消抖處理方法
家電科技(2013年4期)2013-07-09 10:55:08
解析某型號(hào)手機(jī)按鍵檢測(cè)程序的缺陷
FPGA設(shè)計(jì)中狀態(tài)機(jī)安全性研究
临海市| 岱山县| 中牟县| 望江县| 礼泉县| 信宜市| 湾仔区| 平远县| 北安市| 三门县| 海伦市| 金门县| 辰溪县| 曲阜市| 泰安市| 泗水县| 江陵县| 武隆县| 神木县| 南充市| 隆子县| 孝昌县| 静安区| 万山特区| 襄樊市| 拜城县| 宜黄县| 轮台县| 平和县| 巴南区| 吐鲁番市| 成武县| 定安县| 金昌市| 秀山| 庆阳市| 西宁市| 香港| 靖远县| 濉溪县| 阿巴嘎旗|