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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言状态机编程思想

發(fā)布時間:2023/12/19 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言状态机编程思想 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

關(guān)注、星標公眾號,直達精彩內(nèi)容

文章來源:頭條-嵌入式在左C語言在右

鏈接:https://www.toutiao.com/i6843028812112855564/

有限狀態(tài)機概念

有限狀態(tài)機是一種概念思想,把復(fù)雜的控制邏輯分解成有限個穩(wěn)定狀態(tài),組成閉環(huán)系統(tǒng),通過事件觸發(fā),讓狀態(tài)機按設(shè)定的順序處理事務(wù)。單片機C語言的狀態(tài)機編程,是利用條件選擇語句(switchcase或者ifelse)切換狀態(tài),通過改變狀態(tài)機狀態(tài),讓程序按設(shè)定的順序執(zhí)行。

有限狀態(tài)機由有限的狀態(tài)和相互之間的轉(zhuǎn)移構(gòu)成,在任何時候只能處于給定數(shù)目的狀態(tài)中的一個。當接收到一個輸入事件時,狀態(tài)機產(chǎn)生一個輸出,同時也可能伴隨著狀態(tài)的轉(zhuǎn)移。狀態(tài)機的原理如下:在當前狀態(tài)下,發(fā)生某個事件后轉(zhuǎn)移到下一個狀態(tài),然后決定執(zhí)行的功能動作。可參考如下示意圖:

應(yīng)用舉例

要想使用狀態(tài)機思想進行編程,需要將任務(wù)分解成有限個穩(wěn)定狀態(tài)。

這里以常見的按鍵動作進行舉例說明:

上圖為按鍵典型的動作圖,可以分解為四個狀態(tài),分別為:

狀態(tài)1 = 按鍵彈起、

狀態(tài)2 = 前沿抖動、

狀態(tài)3 = 按鍵按下、

狀態(tài)4 = 后沿抖動。

有限狀態(tài)機的C代碼實現(xiàn)如下:

if?(定時器?>=?10ms)?//10ms是典型消抖時間 {switch?(按鍵狀態(tài)){case?按鍵彈起狀態(tài):if?(IO讀取為低電平)?按鍵狀態(tài)=前沿抖動;?break;case?前沿抖動狀態(tài):if?(IO讀取為低電平)?按鍵狀態(tài)=按鍵按下;?break;case?按鍵按下狀態(tài):if?(IO讀取為高電平)?按鍵狀態(tài)=后沿抖動;?break;case?后沿抖動狀態(tài):if?(IO讀取為高電平)?按鍵狀態(tài)=按鍵彈起;?break; default:按鍵狀態(tài)=按鍵彈起;} }

狀態(tài)機編程建議

巧妙的使用結(jié)構(gòu)體和枚舉一方面可以便于擴展和維護狀態(tài)機的狀態(tài)和事件,另一方面可提高程序的可讀性。假設(shè)有3種狀態(tài)(狀態(tài)數(shù)可以隨意增加),狀態(tài)枚舉如下:

typedef?enum?{state_1=1,state_2,state_3 }State;

假設(shè)有5個事件(也可以隨意增加),事件枚舉如下:

typedef?enum{event_1=1,event_2,event_3,event_4,event_5 }Event;

定義一個結(jié)構(gòu)體描述如下:

typedef?struct?{State?curState;??????//當前狀態(tài)Event?eventId;??????//事件State?nextState;???//下一個狀態(tài)Action?action;?????//動作功能 }StateEvent;

根據(jù)具體的應(yīng)用場景調(diào)整StateEvent,并賦予相應(yīng)的動作功能,整體的基本流程如下:當前狀態(tài)->有事件觸發(fā)->跳到下一個狀態(tài)->具體的動作功能

總結(jié)

狀態(tài)機應(yīng)用很廣泛,也可以鍛煉邏輯思維,LoRa消息推送也常采用狀態(tài)機的思想, 實際上狀態(tài)機涉及的知識點很多,本篇文章只是簡要的介紹了下單片機C語言的狀態(tài)機編程思想,在日后的開發(fā)設(shè)計中,需要不斷的總結(jié)經(jīng)驗并靈活應(yīng)用。

總結(jié)

以上是生活随笔為你收集整理的C语言状态机编程思想的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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