www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 嵌入式 > 嵌入式教程
[導讀]運用狀態(tài)機提高嵌入式軟件效率

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


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


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


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

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


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

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉