新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 運用狀態(tài)機提高嵌入式軟件效率

        運用狀態(tài)機提高嵌入式軟件效率

        作者: 時間:2009-07-02 來源:網絡 收藏

        引 言
        有限機是根據當前以及觸發(fā)條件進行轉換的一種機制,包含一組狀態(tài)集(state)、一個起始狀態(tài)(start state)、一組輸入符號集(alphabet)、一個映射輸入符號和當前狀態(tài)到下一狀態(tài)的轉換函數(shù)(transition func-tion)的計算模型。當輸入符號串時,模型隨即進入起始狀態(tài)。要讓狀態(tài)機改變到新的狀態(tài),依賴于系統(tǒng)的轉換函數(shù)。有限狀態(tài)機中有許多變量,例如,與動作(actions)轉換(Mealy機)或狀態(tài)(摩爾機)關聯(lián)的動作,多重起始狀態(tài),基于沒有輸入符號的轉換或指定符號和狀態(tài)(非定有限狀態(tài)機)的多個轉換、指派給接收狀態(tài)(識別者)的一個或多個狀態(tài)。有限狀態(tài)機多應用于硬件時序電路設計。
        有限狀態(tài)機也可以應用到設計中。在進行設計時,通常的做法是按照信息流程進行順序編程。例如對串行數(shù)據的處理,一般是等待接收數(shù)據,分析數(shù)據,進行數(shù)據處理,然后發(fā)送處理結果。使用這種設計方法,最突出的一點就是在任務的處理過程中,任務基本上獨占了MCU的資源,即在處理串口數(shù)據的過程中,不會再去處理其他消息(中斷除外)。采用這種方式,MCU會在相當長的一段時間內只處理一個任務。如果合理狀態(tài)機機制開發(fā)系統(tǒng)軟件,就可以讓MCU進行多任務的分時處理。

        本文引用地址:http://www.104case.com/article/152440.htm


        1 建立有限狀態(tài)機的模型
        其實在平時的程序設計中,開發(fā)人員已經不知不覺地使用了狀態(tài)機,如按鍵狀態(tài)轉換、菜單顯示狀態(tài)的轉換等。但是,很少有系統(tǒng)會使用狀態(tài)機進行多任務處理。在單片機系統(tǒng)中,通過對系統(tǒng)各功能模塊的分析,可以建立有限狀態(tài)機的模型,繼而在系統(tǒng)的軟件設計中利用狀態(tài)機的特點,開發(fā)出結構清晰的高軟件。
        1.1 系統(tǒng)功能分析
        具有GPS、GPRS功能的公交車智能IC卡收費機,其功能包括對乘客使用的非接觸式IC卡進行刷卡消費,使用GPS進行自動報站,以及使用GPRS進行實時調度等。按照獨占式處理模式,智能收費機的軟件系統(tǒng)會把多個任務按照信息流程進行排隊,處理完一個任務后,再進行下一個任務的處理。使用狀態(tài)機進行軟件編程,可以把每一個任務分解為多個狀態(tài),在某個狀態(tài)處理時,同時檢查其他任務是否需要進行信息處理,并進行狀態(tài)的轉換。這樣就可以讓MCU在等待的空閑時間內進行多個消息的處理。
        1.2 IC卡功能的狀態(tài)機建模
        目前公交車乘客使用的公交卡,一般都是非接觸式IC卡,需要使用一個接口芯片對卡片進行讀寫操作。因此要對IC卡進行操作,就需要先對接口芯片進行初始化,包括對相關I/O引腳的設置、訪問地址的設定等操作。當非接觸式IC卡進入無線操作范圍后,需要使用Request命令喚醒卡片,再對喚醒的卡片(一張或多張)進行防沖突處理,得到卡片的唯一標識碼,然后通過Select命令選擇要進行操作的卡片-。非接觸式IC卡內的數(shù)據是用密碼進行保護的,而且每個區(qū)的密碼都不一樣。因此在對某個區(qū)進行讀寫前,還需要進行密碼的驗證。只有密碼正確了,才可以進行讀寫操作。如果卡片的防沖突處理、選擇卡片操作扇區(qū)、授權驗證這幾個步驟出錯,則需要使用Request命令對卡片重新喚醒,然后再進行其他操作。在完成對卡片某一區(qū)域的讀寫后,可以直接對其他區(qū)域進行操作(需要重新驗證密碼),或者使用Request命令對其他卡片進行操作。
        對IC卡的操作可以分為以下幾個部分:接口芯片的初始化、查詢卡片、防沖突處理、選擇卡片、對操作扇區(qū)授權驗證、讀卡、寫卡。根據對IC卡的操作,可以建立IC卡操作的相應狀態(tài)作為狀態(tài)機。建立狀態(tài)機的模型如圖1所示。類似地,對于GPRS、GPS等功能模塊,也可以進行相應的狀態(tài)機建模。

        2 利用狀態(tài)機進行軟件設計
        利用前面所建立的狀態(tài)機模型,可以方便地進行相應的程序設計。軟件的主要工作是進行正確的狀態(tài)切換和在每個狀態(tài)下執(zhí)行相應的動作。對單個狀態(tài)機處理的程序設計,可以使用“橫式”或“豎式”兩種設計方法。“橫式”設計是把每個狀態(tài)的功能作為一個子函數(shù)處理,在子函數(shù)外部進行狀態(tài)的切換。“豎式”設計是在單個switch語句中對所有的狀態(tài)進行判斷,執(zhí)行相應動作并進行狀態(tài)切換。下面以非接觸式IC卡操作為例,對兩種軟件設計方式進行討論。假設變量如下:當前狀態(tài)為CUr_state,下一狀態(tài)為next_state;狀態(tài)分別為RC500Config、RC500Request、RC500Anticoll、RC500Select、RC500Auth、RC500LoadMk、RC500Read、RC500write。“豎式”程序設計如下:

        linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 吉水县| 柳江县| 革吉县| 沙河市| 长兴县| 镇沅| 四会市| 毕节市| 建平县| 驻马店市| 庄浪县| 黄骅市| 云阳县| 兰州市| 类乌齐县| 东乡族自治县| 乌海市| 隆林| 祥云县| 买车| 隆安县| 全州县| 弋阳县| 顺平县| 眉山市| 永定县| 杂多县| 永康市| 西畴县| 清徐县| 双牌县| 门源| 嘉祥县| 镇赉县| 远安县| 英吉沙县| 杭锦旗| 林州市| 双流县| 柳林县| 定兴县|