STM32开发 -- 状态机与状态切换逻辑
參看:有限狀態(tài)機(jī)的兩種寫法
參看:設(shè)計(jì)模式:一目了然的狀態(tài)機(jī)圖
假設(shè)狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換由下表所示:
簡(jiǎn)單講一下?tīng)顟B(tài)轉(zhuǎn)換過(guò)程:當(dāng)處于State0時(shí)發(fā)生event0 則執(zhí)行action0并將狀態(tài)變成state1,當(dāng)state1狀態(tài)下發(fā)生event2則執(zhí)行action6并將狀態(tài)變成state2。以此類推。
下面描述下實(shí)現(xiàn)上述狀態(tài)機(jī)的兩種不同的寫法:
1)豎著寫:在狀態(tài)中判斷事件,并執(zhí)行相應(yīng)的操作,完成相應(yīng)的狀態(tài)轉(zhuǎn)換。
2)橫著寫:在事件中根據(jù)當(dāng)前的狀態(tài),執(zhí)行相應(yīng)的操作,完成相應(yīng)的狀態(tài)轉(zhuǎn)換。
兩種寫法的實(shí)現(xiàn)C代碼:
上述兩種寫法實(shí)現(xiàn)的功能完全相同,對(duì)比兩種寫法:
1)寫法1(豎著寫)使用了if -else if語(yǔ)句隱含了優(yōu)先級(jí),破壞可事件間的原有關(guān)系(各個(gè)時(shí)間應(yīng)該同優(yōu)先級(jí))
2)寫法1(豎著寫)在結(jié)構(gòu)上是順序查詢方式(查詢事件),浪費(fèi)大量的時(shí)間,而且時(shí)間不可估算。
寫法2(橫著寫)因?yàn)樵谀硞€(gè)時(shí)間點(diǎn)上狀態(tài)是唯一確定的,在時(shí)間處理函數(shù)中通過(guò)switch語(yǔ)句可直接定位到相同狀態(tài),執(zhí)行時(shí)間也可以估算。
3)寫法2(橫著寫)比較直觀,程序執(zhí)行效率較高。
總體來(lái)說(shuō):寫法2要優(yōu)于寫法1。
未完待續(xù)~~
總結(jié)
以上是生活随笔為你收集整理的STM32开发 -- 状态机与状态切换逻辑的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ArrayList的底层实现原理
- 下一篇: STM32开发 -- UTC、UNIX时