/***高效率状态机***/
状态机对于有一定编程经验的程序员一定会用到,因为对于我们的各种各样的模块他们都会有各种状态,其他模块都会根据这些状态和数据进行处理;同时在网络编程方面也会根据网络状态和消息类型进行相应处理等等方面状态机的使用是非常广泛的,我们通常称这种状态机为有限状态机—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文章
7642浏览量
144606 -
状态机
+关注
关注
2文章
497浏览量
28849 -
fsm
+关注
关注
0文章
36浏览量
13075
发布评论请先 登录
睿远研究院丨IO-Link规范解读(十一):ISDU状态机与EVENT事件
C语言和单片机C语言有什么差异
睿远研究院丨IO-Link规范解读(六):主从站状态机解析
在多相降压转换器中使用耦合电感器可提高效率
AP8105:采用先进PFM控制架构的高效率、低纹波DC-DC升压转换器
高效率、6通道、白光LED驱动器,带I2C接口 skyworksinc
高电流、高效率电荷泵,具有自动定时器 skyworksinc
求助,关于srammaster.cydsn中状态机的问题求解
MDD高效率整流管的工作原理:如何降低导通损耗?

介绍一种高效率的c语言状态机
评论