• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

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

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

      鄭玉章,徐愛鈞

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

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

      鄭玉章,徐愛鈞

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

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

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

      引 言

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

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

      1 研究背景

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

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

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

      2 研究方法

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

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

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

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

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

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

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

      ③ 一個狀態(tài)轉移函數(shù)F為:

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

      ④ 一個有限的輸出信號集合為:

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

      ⑤ 時間序列為:

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

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

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

      圖1 按鍵狀態(tài)機轉換圖

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

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

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

      一旦有了正確的狀態(tài)轉換圖,就可以根據(jù)狀態(tài)轉換圖編寫軟件了。在軟件中狀態(tài)機的程序結構,通常使用多分支結構(IF-ELSEIF-ELSE、CASE等)實現(xiàn)?;跔顟B(tài)機方式編寫的簡單按鍵接口函數(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)轉換到按鍵確認態(tài)

      break;

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

      if (!key_press){

      key_return = 1;

      //按鍵仍按下,按鍵確認輸出為“1”

      key_state = key_state_2;

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

      }

      else

      key_state = key_state_0;

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

      break;

      case key_state_2:

      if (key_press) key_state = key_state_0;

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

      break;

      }

      return key_return;

      }

      3 實驗結果與分析

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

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

      圖3 FSM改進算法的CPU性能分析圖

      結 語

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

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

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

      [4] Atmel. Atmega16中文手冊.

      [5] 宏晶科技STC89C51RC/RD+系列單片機器件手冊。

      [6] keil Software.keil c51完全中文手冊,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)機按鍵嵌入式
      基于有限狀態(tài)機的按鍵檢測程序設計
      電子制作(2021年3期)2021-06-16 03:14:26
      基于有限狀態(tài)機的交會對接飛行任務規(guī)劃方法
      搭建基于Qt的嵌入式開發(fā)平臺
      嵌入式軟PLC在電鍍生產流程控制系統(tǒng)中的應用
      一種多方向導光按鍵結構設計
      電子制作(2016年1期)2016-11-07 08:43:05
      Altera加入嵌入式視覺聯(lián)盟
      倍福 CX8091嵌入式控制器
      自動化博覽(2014年4期)2014-02-28 22:31:15
      按鍵的多種狀態(tài)檢測及消抖處理方法
      家電科技(2013年4期)2013-07-09 10:55:08
      解析某型號手機按鍵檢測程序的缺陷
      FPGA設計中狀態(tài)機安全性研究
      黑龍江科學(2011年2期)2011-03-14 00:39:36
      西安市| 昂仁县| 孟州市| 南安市| 清水河县| 马龙县| 苏尼特左旗| 江津市| 元朗区| 苍南县| 丹东市| 芜湖县| 涿鹿县| 珲春市| 桓台县| 微山县| 商河县| 梧州市| 广德县| 德惠市| 偏关县| 探索| 乾安县| 镇雄县| 灵寿县| 浪卡子县| 五指山市| 五莲县| 许昌县| 巴林左旗| 甘肃省| 吐鲁番市| 荥经县| 嵊州市| 巴中市| 萨嘎县| 科技| 恩施市| 屯留县| 凌云县| 汽车|