/***高效率狀態機***/
狀態機對于有一定編程經驗的程序員一定會用到,因為對于我們的各種各樣的模塊他們都會有各種狀態,其他模塊都會根據這些狀態和數據進行處理;同時在網絡編程方面也會根據網絡狀態和消息類型進行相應處理等等方面狀態機的使用是非常廣泛的,我們通常稱這種狀態機為有限狀態機—FSM。
在進行有限狀態機編寫之前,我們需要進行狀態的梳理,最好是能畫UML圖或者是簡單的畫一些狀態圖,那么我們平時都是如何實現這個狀態機框架的呢?
1)用判斷語句進行狀態機的分支
if(statue == STATUE_1)sStatue1Process();
else if(statue == STATUE_2)sStatue2Process();
else if(statue == STATUE_3)sStatue3Process();
elsesStatue4Process();
上面通過if/else分支了4種狀態,分別每種狀態有各自的處理辦法process函數,那么狀態之間如何轉換呢?在我們的狀態處理函數里面,會通過處理當前狀態的相關事務,然后通過相關條件改變statue,如statue=STATUE_2,從而下一次進入對應的狀態中!
那么上面我們是通過分支來進行處理,同樣我們也可以使用switch來進行處理!至于選擇if/else還是switch,我們之前有個文章進行分析,大家可以前往閱讀,這兩種分支語句對于不太多的狀態仍然是首選的,而對于我們的狀態較多,那么可能通過判斷會浪費一些時間,為了提高效率,我們提出了第二種方法。
2)用函數指針高效提高狀態機效率
參考代碼如下:



按照預期輸出了最終的結果,該辦法類似于用空間換了時間,把狀態和處理進行了直接綁定,這樣會使用掉一些內存,不過對于整個軟件代碼而言是不值一提的!
優化:我們可能對于狀態處理還需要傳入一些數據,我們可以優化函數指針讓其變成含參數的形式!等等優化版本大同小異!(哈哈,上面的代碼手機打得,風格寫得不好大家請見諒)
審核編輯:劉清
-
C語言
+關注
關注
183文章
7644瀏覽量
145596 -
狀態機
+關注
關注
2文章
499瀏覽量
29145 -
fsm
+關注
關注
0文章
36瀏覽量
13112
發布評論請先 登錄
高效率與低噪聲兼得:LT83401/LT83402的深度剖析
資產管理怎么提高效率
睿遠研究院丨IO-Link規范解讀(十一):ISDU狀態機與EVENT事件
C語言和單片機C語言有什么差異
睿遠研究院丨IO-Link規范解讀(六):主從站狀態機解析
在多相降壓轉換器中使用耦合電感器可提高效率
AP8105:采用先進PFM控制架構的高效率、低紋波DC-DC升壓轉換器
高效率、6通道、白光LED驅動器,帶I2C接口 skyworksinc
高電流、高效率電荷泵,具有自動定時器 skyworksinc
求助,關于srammaster.cydsn中狀態機的問題求解
MDD高效率整流管的工作原理:如何降低導通損耗?
介紹一種高效率的c語言狀態機
評論