欧美在线专区-欧美在线伊人-欧美在线一区二区三区欧美-欧美在线一区二区三区-pornodoxxx中国妞-pornodoldoo欧美另类

position>home>Blogs

C語言狀態機編程思想

[導讀]有限狀態機是語言狀一種概念思想,把復雜的態機控制邏輯分解成有限個穩定狀態,組成閉環系統,編程通過事件觸發,思想讓狀態機按設定的語言狀順序處理事務。單片機C語言的態機狀態機編程,是編程利用條件選擇語句( switch 、 case 或者 if 、思想 else )切換狀態,語言狀通過改變狀態機狀態,態機讓程序按設定的編程順序執行。

有限狀態機概念

有限狀態機是思想一種概念思想,把復雜的語言狀控制邏輯分解成有限個穩定狀態,組成閉環系統,態機通過事件觸發,編程讓狀態機按設定的順序處理事務。單片機C語言的狀態機編程,是利用條件選擇語句( switchcase或者 ifelse)切換狀態,通過改變狀態機狀態,讓程序按設定的順序執行。
有限狀態機由有限的狀態和相互之間的轉移構成,在任何時候只能處于給定數目的狀態中的一個。當接收到一個輸入事件時,狀態機產生一個輸出,同時也可能伴隨著狀態的轉移。狀態機的原理如下:在當前狀態下,發生某個事件后轉移到下一個狀態,然后決定執行的功能動作。可參考如下示意圖:

C語言狀態機編程思想

應用舉例

要想使用狀態機思想進行編程,需要將任務分解成有限個穩定狀態。
這里以常見的按鍵動作進行舉例說明:

上圖為按鍵典型的動作圖,可以分解為四個狀態,分別為:
狀態1 = 按鍵彈起、
狀態2 = 前沿抖動、
狀態3 = 按鍵按下、
狀態4 = 后沿抖動。
有限狀態機的C代碼實現如下:
if?(定時器?>=?10ms)?//10ms是典型消抖時間
{
???switch?(按鍵狀態)
???{
?????case?按鍵彈起狀態:
??????if?(IO讀取為低電平)?按鍵狀態=前沿抖動;?
?????break;
?????case?前沿抖動狀態:
??????if?(IO讀取為低電平)?按鍵狀態=按鍵按下;?
?????break;
?????case?按鍵按下狀態:
??????if?(IO讀取為高電平)?按鍵狀態=后沿抖動;?
?????break;
?????case?后沿抖動狀態:
??????if?(IO讀取為高電平)?按鍵狀態=按鍵彈起;?
?????break;
default:按鍵狀態=按鍵彈起;
???}
}

狀態機編程建議

巧妙的使用結構體和枚舉一方面可以便于擴展和維護狀態機的狀態和事件,另一方面可提高程序的可讀性。假設有3種狀態(狀態數可以隨意增加),狀態枚舉如下:
typedef?enum?{ 
??state_1=1,
??state_2,
??state_3
}State;
假設有5個事件(也可以隨意增加),事件枚舉如下:
typedef?enum{ 
??event_1=1,
??event_2,
??event_3,
??event_4,
??event_5
}Event;

定義一個結構體描述如下:
typedef?struct?{ 
??State?curState;??????//當前狀態
??Event?eventId;??????//事件
??State?nextState;???//下一個狀態
??Action?action;?????//動作功能
}StateEvent;
根據具體的應用場景調整 StateEvent,并賦予相應的動作功能,整體的基本流程如下: 當前狀態->有事件觸發->跳到下一個狀態->具體的動作功能

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


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

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


版權歸原作者所有,如有侵權,請聯系刪除。

免責聲明:本文內容由21ic獲得授權后發布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯系我們,謝謝!

Popular articles

主站蜘蛛池模板: 免费人成在线| 日韩高清欧美| 天天5g天天爽永久免费看欧美| 日本漂亮人妖megumi| 55夜色66夜色国产精品视频| 亚洲精品中文字幕乱码三区| 美女的阴沟| 久久精品免费一区二区三区| 成年福利片120秒体验区| 星空无限传媒好闺蜜2| 亚洲精品午夜久久久伊人| 亚洲欧美视频一区| 午夜三级黄色片| 亚洲人成电影院在线观看| 特级做a爰片毛片免费看| 国产精品久久国产精品99| 久久精品久久久久观看99水蜜桃| 动漫洗濯屋| 久草资源| 日本免费网站在线观看| 国产精品久久一区二区三区| 九九精品99久久久香蕉| 亚洲午夜精品久久久久久人妖| 快点使劲舒服爽视频| 日韩三级网址| 久久亚洲精品人成综合网| 麻豆国产精品va在线观看不卡 | 成人免费v片在线观看| a级毛片免费| 被女同桌调教成鞋袜奴脚奴| 欧美zoozzooz在线观看| 2019天天干夜夜操| 91在线国内在线播放老师 | 蜜桃丶麻豆91制片厂| 国产乱码精品一区二区三区四川人| 欧美播播| 免费女人18毛片a级毛片视频| 久久综合色天天久久综合图片| 国产999在线观看| 欧美黑人xxxx| 在线免费三级|