日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

STM32开发 -- 状态机与状态切换逻辑

發(fā)布時(shí)間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32开发 -- 状态机与状态切换逻辑 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

參看:有限狀態(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代碼:

//豎著寫 switch(cur_state) {case State0:if(event1){action0;cur_state = State1;}else if(event2){action4;cur_state = State1;}else if(event3){action5;cur_state = State2;}break;case State1:if(event1){action1;cur_state = State2;}else if(event3){action6;cur_state = State0;}break;case State2:if(event1){action3;cur_state = State0;}break;default:break; } //橫著寫 void event0func(void) {switch(cur_state){case State0:action0;cur_state = State1;break;case State1:action1;cur_state = State2;break;case State2:action1;cur_state = State0;break;default:break;} }void event1func(void) {switch(cur_state){case State0:action4;cur_state = State1;break;default:break;} }void event2func(void) {switch(cur_state){case State0:action5;cur_state = State2;break;case State1:action6;cur_state = State0;break;default:break;} }

上述兩種寫法實(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。