基于狀態機的嵌入式系統設計_第1頁
基于狀態機的嵌入式系統設計_第2頁
基于狀態機的嵌入式系統設計_第3頁
基于狀態機的嵌入式系統設計_第4頁
基于狀態機的嵌入式系統設計_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、基于狀態機的嵌入式系統設計隨著嵌入式系統的發展,微處理器功能的不斷強大,內嵌的功能模塊不斷增多,使嵌入式系統被要求也能夠完成多個不同的實時任務,如在完成鍵盤掃描的同時又要完成與外部的通信?,F狀傳統的嵌入式系統程序設計的方法采用多個任務的順序執行,要執行完一個任務(如鍵盤掃描完一次)才執行,同一個任務兩次執行之間有較大的延時,常常無法滿足系統的實時性要求。于是出現了一個趨勢嵌入式系統操作系統的引入,利用系統提供的多任務特性,將處理器時間片按照一定的規律分配給各個任務。操作系統的引入帶來的益處是1、大多數操作系統有任務這一概念,提供了任務創建,任務終結,任務的掛起和喚醒,任務之間的切換,任務的優先

2、級等特性的管理等常用系統調用,省去了程序員大量編程工作量。2、由于個任務之間也不是完全獨立的,各任務之間需要同步,因此任務之間的通信也是十分重要的,操作系統提供的信號量、管道等通信方式滿足了系統的不同需求,特別是管道彌補了由于嵌入式系統處理器RAM量較少,無法進行大量的數據交換的缺點,省去了擴展RAM的需要。但是采用嵌入式操作系統也有其很大的局限性,由于系統為了存儲各任務的狀態(PCB,進程控制塊),造成了大量的RAM開銷。不象馮·諾依曼結構,程序和數據在一個空間中,需要將放在外存中的程序載入到RAM中才能運行,因此RAM空間較大;由于低檔的嵌入式處理器往往采用哈佛結構,程序和數據是

3、獨立空間,往往存放程序ROM空間較大,而存放數據的RAM空間較小。所以要在低檔嵌入式處理器上實現操作系統幾乎是不現實,因為由于為了實現多任務和任務切換時的狀態保存,將占去大部分數據存儲器的空間。那么如何在低檔嵌入式處理器較為方便的實現多實時任務呢?前面我們說過,傳統的嵌入式系統設計遇到要完成多個任務時,將各個任務順序執行,而且每個任務都要執行到一個段落才執行下一個任務,這造成任務之間實時性很差,可能因此丟失數據。而操作系統則不然,當某一個任務的時間片用完或滿足了被掛起的條件時,操作系統將終止該任務的運行,保存現場,切換到其他任務。當時間片被分割到一定小時,從宏觀上看,各任務就好象同時在運行了。

4、但是正因為操作系統隨時可能將任務打斷,這就需要大量的數據空間保存當前任務狀態。那么有沒有一種方法既能較少的占用RAM空間又能從宏觀上達到各任務的同時運行呢?世間的事物都是處于不同的狀態的,程序和處理器也是如此。從不同的角度看,如果從最細微的角度看,處理器和程序每時每刻的狀態都不同,假如我們用一個狀態向量來表示某一時刻某一個任務所處狀態,那么采用操作系統進行任務切換時其保存的狀態向量的位數將很大,因為其可能處于的狀態數目實在太多了,每一個CPU寄存器值的可能組合都是一種狀態;而采用傳統的設計方法,其任務切換時的狀態是唯一的,因此其要保存的狀態向量的位數為零。于是根據這一特點,我們事先將任務分割成

5、若干個狀態,每次任務被執行時,只執行其中的一個狀態,這樣需要存儲任務的狀態向量的位數大大減少了,同時每一個任務單次執行的時間減少了,所有任務能在較短的時間內被執行,以滿足實時性的要求。同時采用狀態機中的狀態圖,能夠較好地理順任務的執行過程,使程序設計也比較輕松。狀態機在數字邏輯電路中,時序電路的設計常常用到狀態機。所謂狀態機就是將事物的過程分割成一系列的狀態和這些狀態之間轉換的條件,相應輸出。狀態機又可分為MOORE狀態機和MEALY狀態機。MEALY狀態機的輸出是輸入和當前狀態的函數 ,MOORE狀態機的輸出只是當前狀態的函數。這兩種狀態機的次態都是當前狀態和輸入的函數。由于MOORE狀態機

6、的輸出與輸入無關,因此不適合我們的要求。本文所討論的的狀態機為MEALY狀態機。下面我們來看一個簡單的狀態機,對一個按鍵是否按下判斷的程序的狀態機。按照傳統的程序設計,判斷一個按鍵是否按下分為四個步驟:1、判斷鍵是否被按下,2、如按下,延時10ms,去機械抖動。3、再次讀按鍵,如仍被按下,輸出該鍵被按下的消息。4、讀按鍵,由上圖可知,判斷按鍵的過程被分割為4個狀態,按照前面所述的,如果使用傳統的程序設計方法,一旦有鍵按下,必須將這四個狀態都執行一遍,那么按鍵的程序占用CPU的時間將大于10ms,這將使系統的實時性下降。而采用狀態機的設計方法,每次系統主循環執行到按鍵判斷時,只執行其中的一個狀態

7、,然后根據現態和輸入得出下一次執行的狀態(即次態)并保存,便退出按鍵判斷的程序部分,執行其他程序。由此每次按鍵判斷程序執行的時間就很短。一個良好的狀態機的分析過程可分為以下幾步:1、找出狀態2、畫狀態轉換圖3、將狀態轉換圖化簡4、程序實現關于狀態轉換圖化簡可參見數字邏輯電路的相關書籍。程序實現將狀態機轉化為程序,根據工具的不同,有多種不同的選擇。如51匯編語言,可用如下方法實現:MOV A, STATEMOV DPTR, STATE_TABLERL AJMP A+DPTRSTATE_TABLE:AJMP STATE_1AJMP STATE_2AJMP STATE_3以C語言實現可以利用函數指針

8、來實現不同狀態的切換。下列程序為一個讀鍵的狀態機的實現。Typedef enumreadKey=0,debounceDelay,confirmKey,waitKeyRelease KeyState;Void (*keyStateFunction)()=getKeyValid,delayKey,confirmKeyValid,isKeyRelease;KeyState currKeyState;Void main()currKeyState=readKey;system initializationwhile(1)keyStateFunctioncurrKeyState();something elsevoid getKeyValid(void)是否有鍵按下如果有currKeyState=debounceDelay;結束判斷void delayKey(void)(設系統基準計數器每隔一個毫秒加一)currKeyState=confirmKey;結束判斷void confirmKeyValid(void)如果是currKeyState=waitKeyRelease;currKeyState=readKey;標志位向其他程序通信該鍵以被按下過 結束判斷void isKeyRelease(void)判斷該鍵是否放開currKeyState=readKey

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論