0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

冬至配饺子 来源:最后一个bug 作者:bug菌 2022-08-12 09:07 次阅读

/***高效率状态机***/

状态机对于有一定编程经验的程序员一定会用到,因为对于我们的各种各样的模块他们都会有各种状态,其他模块都会根据这些状态和数据进行处理;同时在网络编程方面也会根据网络状态和消息类型进行相应处理等等方面状态机的使用是非常广泛的,我们通常称这种状态机为有限状态机—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)用函数指针高效提高状态机效率

参考代码如下:

pYYBAGL1p5GABeHLAAFYvFCT2hU881.png

poYBAGL1p5iANUklAAEKVJLXQxg843.png

pYYBAGL1p56AbI1MAACoAODWsEc134.png

按照预期输出了最终的结果,该办法类似于用空间换了时间,把状态和处理进行了直接绑定,这样会使用掉一些内存,不过对于整个软件代码而言是不值一提的!

优化:我们可能对于状态处理还需要传入一些数据,我们可以优化函数指针让其变成含参数的形式!等等优化版本大同小异!(哈哈,上面的代码手机打得,风格写得不好大家请见谅)


审核编辑:刘清


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7616

    浏览量

    138007
  • 状态机
    +关注

    关注

    2

    文章

    492

    浏览量

    27690
  • fsm
    fsm
    +关注

    关注

    0

    文章

    35

    浏览量

    12847
收藏 人收藏

    评论

    相关推荐

    一种新型高效率的服务器电源系统

    一种新型高效率的服务器电源系统
    发表于 12-19 16:45 1次下载

    Simulink中的状态机建模方法 Simulink数据可视化与分析功能

    。 1.2 使用状态机图(Stateflow) Stateflow是Simulink的个附加产品,专门用于设计和模拟状态机
    的头像 发表于 12-12 09:27 994次阅读

    深入理解C语言:循环语句的应用与优化技巧

    在程序设计中,我们常常需要重复执行某段代码。为了提高效率和简化代码,循环语句应运而生。C语言作为门经典的编程
    的头像 发表于 12-07 01:11 273次阅读
    深入理解<b class='flag-5'>C</b><b class='flag-5'>语言</b>:循环语句的应用与优化技巧

    高效率PA设计的双重挑战

    效率”在射频功率放大器(PA)设计中占据举足轻重的地位。高效率PA设计的两大核心:PA的“Class”设计以及功率合成架构。然而,在实际的射频前端系统中,PA并非孤立存在,而是与整个系统紧密相连。系统层面的设计方案对PA功耗有着深远影响。
    的头像 发表于 10-18 15:02 525次阅读
    <b class='flag-5'>高效率</b>PA设计的双重挑战

    触发器和状态机的关系是什么

    触发器和状态机在数字电路设计中有着紧密的关系,它们共同构成了时序逻辑电路的基础,用于实现数据的存储、处理和传输。
    的头像 发表于 08-12 11:24 568次阅读

    高效率二极管如何识别判断

    高效率二极管在在电源管理和电能转换领域,主要特点是具有低正向压降和快速的开关速度,从而提高电路的整体效率高效率二极管的基本特性高效率
    的头像 发表于 08-12 09:51 577次阅读
    <b class='flag-5'>高效率</b>二极管如何识别判断

    c类放大器最高效率是什么

    C类放大器是一种无线电频率放大器,它在工作时,晶体管的导通时间小于个周期的半,因此被称为C类放大器。
    的头像 发表于 08-01 14:46 621次阅读

    如何在FPGA中实现状态机

    在FPGA(现场可编程门阵列)中实现状态机一种常见的做法,用于控制复杂的数字系统行为。状态机能够根据当前的输入和系统状态,决定下步的动作
    的头像 发表于 07-18 15:57 748次阅读

    电源设计:同步整流带来的不仅仅是高效率

    ,增益急剧下降,原因是极点导致更低的交叉频率,从而降低了瞬态响应。总之,同步整流可提高效率,同时也能够极大地帮助瞬态负载调节。它为电源预加载提供了一种高效的方法。另外,相比摆动电感,它还拥有更加稳定的控制环路特性。它提高了传统降
    发表于 07-11 11:17

    玩转Spring状态机

    说起Spring状态机,大家很容易联想到这个状态机和设计模式中状态模式的区别是啥呢?没错,Spring状态机就是状态模式的
    的头像 发表于 06-25 14:21 1057次阅读
    玩转Spring<b class='flag-5'>状态机</b>

    关于SMU状态机的问题求解

    我有些关于 SMU 状态机的问题。 假设由于某种原因,SMU 已进入故障状态。 手册指出,要返回运行状态并将 FSP 恢复到无故障状态,应
    发表于 05-29 08:18

    在Verilog中实现Moore型和Mealy型状态机的方法简析

    编写能够被综合工具识别的状态机,首先需要理解状态机的基本概念和分类。状态机(FSM)是表示有限个状态以及在这些状态之间转换的逻辑结构。
    的头像 发表于 05-01 11:38 1829次阅读

    嵌入式编程,如何用 C 语言实现状态机设计?

    状态机模式是一种行为模式,通过多态实现不同状态的调转行为的确是一种很好的方法,只可惜在嵌入式环境下,有时只能写纯C代码,并且还需要考虑代码的
    发表于 04-23 11:00

    如何采用“状态机”解析UART数据帧

    如果个系统接收上述“不定长度”的协议帧,将会有个挑战--如何高效接收与解析。 为简化系统设计,我们强烈建议您采用“状态机”来解析UART数据帧。
    的头像 发表于 03-25 14:29 819次阅读
    如何采用“<b class='flag-5'>状态机</b>”解析UART数据帧

    高效率的DC电源模块设计技巧

    BOSHIDA  提高效率的DC电源模块设计技巧 设计高效率的BOSHIDA  DC电源模块可以帮助减少能源浪费和提高系统功耗,以下是些设计技巧: 1. 选择高效率的功率转换器:选择
    的头像 发表于 02-26 14:27 648次阅读
    提<b class='flag-5'>高效率</b>的DC电源模块设计技巧