<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

作者: 時(shí)間:2009-07-02 來(lái)源:網(wǎng)絡(luò ) 收藏


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


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

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


結 語(yǔ)
使用上述狀態(tài)機機制設計的智能公交車(chē)IC卡收費機的系統軟件,能夠及時(shí)處理IC卡信息、GPS定位信息、GPRS通信等多個(gè)任務(wù)的操作,運行穩定,完全滿(mǎn)足實(shí)際應用的要求。該機制非常適合功能較多的軟件系統設計。

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

上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>