/***高效率状态机***/
状态机对于有一定编程经验的程序员一定会用到,因为对于我们的各种各样的模块他们都会有各种状态,其他模块都会根据这些状态和数据进行处理;同时在网络编程方面也会根据网络状态和消息类型进行相应处理等等方面状态机的使用是非常广泛的,我们通常称这种状态机为有限状态机—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语言
+关注
关注
180文章
7616浏览量
138007 -
状态机
+关注
关注
2文章
492浏览量
27690 -
fsm
+关注
关注
0文章
35浏览量
12847
发布评论请先 登录
相关推荐
Simulink中的状态机建模方法 Simulink数据可视化与分析功能
高效率PA设计的双重挑战
![<b class='flag-5'>高效率</b>PA设计的双重挑战](https://file1.elecfans.com/web1/M00/F3/38/wKgZoWcSBwuAZ5Y6AAGYpwiWNBQ505.png)
如何在FPGA中实现状态机
电源设计:同步整流带来的不仅仅是高效率
关于SMU状态机的问题求解
在Verilog中实现Moore型和Mealy型状态机的方法简析
嵌入式编程,如何用 C 语言实现状态机设计?
提高效率的DC电源模块设计技巧
![提<b class='flag-5'>高效率</b>的DC电源模块设计技巧](https://file1.elecfans.com/web2/M00/C0/B9/wKgZomXYLdyAcwewAAHXir4VCZw058.png)
评论