不管做什么或者實現什么功能,必定會有實現需求的步驟,簡單理解就是在某個狀態下做某事,這就很符合C語言面向過程的特點,個人認為面向對象其實是面向過程的封裝,封裝的好處自然就是符合人的思維,以及便于后續的修改移植工作。
| 簡單的狀態機
相信讀者們剛入門學習單片機的時候,應該比較常使用標志位來觸發任務運行,這就是簡單的狀態機。
//主函數 intmain() { intflag=0; while(1) { if(flag==0) { task_A(); } elseif(flag==1) { task_B(); } elseif(flag==2) { task_C(); } ...... } }
往往判斷語句太多不利于閱讀,那就需要對上面的代碼進行優化:
//主函數 intmain() { intflag=0; while(1) { switch(flag) { case0x00: task_A(); break; case0x01: task_B(); break; case0x02: task_C(); break; ...... default: break; } } }
|封裝狀態機
在項目中使用狀態機往往需要封裝一下,避免全局變量標志到處飛就不好修改和維護項目,最好的方法就是高內聚低耦合。
voidtest(void) { staticstate; if(state==0) { if(!task_A()) { state=1; } } elseif(state==1) { if(!task_B()) { state=2; } } elseif(state==2) { if(!task_C()) { state=0; } } } intmain() { while(1) { test(); } }
|附件
簡單寫個小demo,加深一下對狀態機的理解,這些狀態都是面向有限的狀態而言。
#include"stdio.h" #include"stdint.h" typedefstruct { uint8_tflag; }task_struct; //觸發任務 voidtask_open(task_struct*task) { if(!task->flag) { task->flag=!task->flag; } } //關閉任務 voidtask_close(task_struct*task) { if(task->flag) { task->flag=!task->flag; } } //任務初始化 voidtask_init(void) { /*初始化*/ //printf("testinit "); } //任務處理 voidtask_handle(void) { printf("testhandle "); } //輪訓任務 voidtask_A(task_struct*task,uint8_ttype) { if(!task->flag) { task_init(); } else { if(!type) { /*單次執行*/ task_handle(); /*關閉任務*/ task_close(task); } else { /*循環執行*/ task_handle(); } } } intmain() { task_structtaskA; task_open(&taskA); while(1) { task_A(&taskA,0); } }
審核編輯:劉清
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
單片機
+關注
關注
6032文章
44514瀏覽量
632951 -
C語言
+關注
關注
180文章
7598瀏覽量
136174 -
狀態機
+關注
關注
2文章
492瀏覽量
27477 -
單封裝
+關注
關注
0文章
5瀏覽量
5335
原文標題:C語言|狀態機
文章出處:【微信號:玩轉單片機,微信公眾號:玩轉單片機】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
基于C語言的狀態機實現方案
關于狀態機,基礎的知識點可以自行理解。本文主要講解的是一個有限狀態機FSM通用的寫法,目的在于更好理解,移植,節省代碼閱讀與調試時間,體現出編程之美。
發表于 09-13 09:28
?766次閱讀
有限狀態機的硬件描述語言設計方法
實驗目的
1、 熟悉用硬件描述語言(VHDL)設計一般狀態機所包含的幾個基本部分;2、 掌握用硬件描述語言(VHDL)設計Moore型和Mealy型有限狀態機的方法;3、 了解
發表于 09-03 09:48
?0次下載
狀態模式(狀態機)
以前寫狀態機,比較常用的方式是用 if-else 或 switch-case,高級的一點是函數指針列表。最近,看了一文章《c語言設計模式–狀態模式(
發表于 12-16 16:53
?9次下載
C語言狀態機編程思想
關注、星標公眾號,直達精彩內容文章來源:頭條-嵌入式在左C語言在右鏈接:https://www.toutiao.com/i6843028812112855564/有限狀態機概念有限狀態機
發表于 01-13 13:32
?15次下載
什么是狀態機?狀態機的種類與實現
狀態機,又稱有限狀態機(Finite State Machine,FSM)或米利狀態機(Mealy Machine),是一種描述系統狀態變化的模型。在芯片設計中,
評論