新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 運用狀態機提高嵌入式軟件效率

        運用狀態機提高嵌入式軟件效率

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


        “橫式”設計是把每個及所要執行的動作單獨放到一個子函數中處理,有RC500Config()、RC500Request()、RC500Anticoll()等。工作的確定可以通過查詢表獲得,找到相應的狀態后運行相應的子函數。在每個子函數中,既有該狀態下應該執行的動作,也有狀態的轉換。然后在主程序中判斷狀態是否發生了轉換,再轉到相應的狀態子程序中執行。
        橫豎兩種寫法,實現的功能完全相同,但是“豎式”隱含了優先級排序,破壞了事件間原有的關系。同時,由于處在每個狀態的事件數目不一致,而且事件發生的時間是隨機的,“豎式”設計為順序查詢方式,因此大量時間被浪費。“橫式”設計,在某個時間點狀態是唯一確定的,延遲時間可以預先準確估算。而且在事件發生時,系統會調用相應的事件函數,在函數里查找唯一確定的狀態,并根據其狀態執行動作和狀態轉移。使用這種方式設計的思路清晰簡潔,高,故使用“橫式”方法設計程序更好。類似地,對于GPRS、GPS等功能模塊也可以狀態機機制進行程序設計,從而在整個智能收費機的設計中,對所有任務的處理都可以狀態機機制進行相應的程序設計。


        3 使用狀態機的效能分析
        在很多系統設計中都可以用到類似狀態機的設計思想,比較常用的地方就是各種液晶界面的設計。使用狀態機機制設計軟件,可以使設計思路清晰、靈活,軟件的可讀性強,便于以后的維護。如果合理地使用狀態機,還可以較大幅度地MCU的運行。下面以非接觸式IC卡的軟件設計流程為例討論。
        圖2(a)是傳統的軟件設計流程,使用這種流程設計的系統軟件按部就班地先執行RC500Config(),再執行RCS00Request(),然后是RC500Anticoll(),直到對IC卡操作完成,再轉到其他任務(如GPS)。這樣IC卡的操作任務占用了整個MCU資源。圖2(b)是使用狀態機設計系統軟件的流程。在使用狀態機的同時設定一個軟件時鐘,用來為系統的各個任務進行計時,并進行任務的調度。軟件時鐘使用一個長整型變量進行計時,利用MC[J定時器1 ms或10 ms的中斷來實現,從而使時鐘不受任務執行過程的影響。當某個任務執行過程需要等待延時,執行子函數返回main()函數,讓其他任務使用MCtJ資源。這樣實現的軟件,在處理某個任務的空隙可以同時處理其他任務的操作,有效地了MCU處理事件的能力。具體實現方法如下:

        ……
        }
        當延時不夠200ms時,函數RC500Request()直接返回而沒有改變IC卡操作的狀態,因此MCU下一次進行IC卡操作時,繼續執行函數RC500Request(),直到IC卡操作狀態改變。同時,函數RC500Request()返回后,main()函數會檢查GPS、GPRS等工作模塊,執行其中的某些動作。也就是說,在執行IC卡操作的同時,可以執行其他任務的操作;同理,在執行其他任務的操作時,也可以執行IC卡的一些操作。這樣就可以充分利用MCU的資源,MCU對多任務的處理


        結 語
        使用上述狀態機機制設計的智能公交車IC卡收費機的系統軟件,能夠及時處理IC卡信息、GPS定位信息、GPRS通信等多個任務的操作,運行穩定,完全滿足實際應用的要求。該機制非常適合功能較多的軟件系統設計。

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

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 许昌市| 交城县| 江阴市| 北流市| 郧西县| 大埔区| 甘谷县| 阿拉善盟| 汶川县| 临桂县| 通州市| 大石桥市| 西城区| 元谋县| 沙洋县| 太仆寺旗| 海晏县| 安乡县| 通辽市| 海南省| 东阳市| 米易县| 伊川县| 米脂县| 交口县| 南平市| 平山县| 宜黄县| 贵溪市| 罗平县| 保山市| 遵义县| 垣曲县| 齐齐哈尔市| 尼勒克县| 昂仁县| 石泉县| 兴安县| 罗田县| 龙江县| 镇安县|