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语言
    +关注

    关注

    183

    文章

    7642

    浏览量

    144606
  • 状态机
    +关注

    关注

    2

    文章

    497

    浏览量

    28849
  • fsm
    fsm
    +关注

    关注

    0

    文章

    36

    浏览量

    13075
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    睿远研究院丨IO-Link规范解读(十一):ISDU状态机与EVENT事件

    上篇我们介绍了ISDU的典型编码格式和应用案例,本篇我们就来详细介绍下,ISDU的状态机,并把EVENT事件的逻辑,给大家好好解析下。 1主站ISDU状态机 如上图所示,ISDU的
    的头像 发表于 11-29 18:28 2695次阅读
    睿远研究院丨IO-Link规范解读(十一):ISDU<b class='flag-5'>状态机</b>与EVENT事件

    为什么单片还在用C语言编程?

    最适合单片开发的编程语言实在太过晦涩难懂,学习起来非常的不方便,并且每一种单片的汇编指令有很大区别,所以想把个程序从这种单片
    发表于 11-28 07:37

    什么是状态机

    时刻所存在的稳定的工作情况,系统在整个工作周期中可能有多个状态。例如部电动机共有正转、反转、停转这 3 状态
    发表于 11-27 08:15

    嵌入式开发为何经常用到状态机架构

    相悖。 状态机就能解决逻辑完备性的问题。 状态机一种以系统状态为中心,以事件为变量的设计方法,它专注于各个状态的特点以及
    发表于 11-25 07:08

    C语言和单片C语言有什么差异

    的目标代码短、运行速度高、存储空间小、符合C语言的ANSI标准,生成的代码遵循Intel目标文件格式,而且可与A51汇编语言PL/M51语言目标代码混合使用。 4、
    发表于 11-14 07:55

    睿远研究院丨IO-Link规范解读(六):主从站状态机解析

    前言 书接上文,今天我们就来好好聊聊主从站的DL-Mode状态机,还请各位童鞋前排坐好! 1主站状态机解析 主站的DL-Mode状态机有5个大状态,也是我们很熟悉的 建立通信、开始、预
    的头像 发表于 10-28 17:34 5772次阅读
    睿远研究院丨IO-Link规范解读(六):主从站<b class='flag-5'>状态机</b>解析

    在多相降压转换器中使用耦合电感器可提高效率

    在不影响性能或增加物理空间的情况下提高效率一种很有前景的方法是使用耦合电感器 (CL)。通过使用相间互感技术,CL 可出色的消除电流纹波,从而在保持兼容传统布局的同时显著提高效率。 本文将简要概述多相降压转换器设计人员在
    的头像 发表于 10-02 16:57 1565次阅读
    在多相降压转换器中使用耦合电感器可提<b class='flag-5'>高效率</b>

    AP8105:采用先进PFM控制架构的高效率、低纹波DC-DC升压转换器

    致 AP8105通过创新的PFM控制架构和精密的模拟设计,为低输入电压应用提供了高效率、低噪声的功率解决方案。其卓越的电气特性、灵活的设计选项和极简的外部元件需求,使其成为电池供电设备的理想选择。无论是消费电子产品还是工业应用,AP8105都能提供可靠、
    发表于 08-22 10:17

    高效率、6通道、白光LED驱动器,带I2C接口 skyworksinc

    电子发烧友网为你提供()高效率、6通道、白光LED驱动器,带I2C接口相关产品参数、数据手册,更有高效率、6通道、白光LED驱动器,带I2C接口的引脚图、接线图、封装手册、中文资料、英
    发表于 07-30 18:31
    <b class='flag-5'>高效率</b>、6通道、白光LED驱动器,带I2<b class='flag-5'>C</b>接口 skyworksinc

    高电流、高效率电荷泵,具有自动定时器 skyworksinc

    电子发烧友网为你提供()高电流、高效率电荷泵,具有自动定时器相关产品参数、数据手册,更有高电流、高效率电荷泵,具有自动定时器的引脚图、接线图、封装手册、中文资料、英文资料,高电流、高效率电荷泵,具有自动定时器真值表,高电流、
    发表于 07-29 18:32
    高电流、<b class='flag-5'>高效率</b>电荷泵,具有自动定时器 skyworksinc

    求助,关于srammaster.cydsn中状态机的问题求解

    晚上好。 我目前正在学习 GPIF II。 查看..EZ-USB FX3 SDK1.3firmwaregpif_examplescyfxsrammastersrammaster.cydsn中的状态机,有状态START和START1。 这意味着什么?
    发表于 05-12 06:20

    MDD高效率整流管的工作原理:如何降低导通损耗?

    在高频、高功率应用中,高效率整流管的导通损耗直接影响电路的整体能效和热管理。MDD作为专业的二极管制造商,其高效率整流管因低正向压降(VF)和快速恢复特性广泛应用于开关电源(SMPS)、PFC电路
    的头像 发表于 04-03 10:55 744次阅读
    MDD<b class='flag-5'>高效率</b>整流管的工作原理:如何降低导通损耗?

    大功率直流电源如何提高效率

    大功率直流电源提高效率的方法主要包括以下几个方面: 、优化电源拓扑结构 电源拓扑结构是影响电源效率的关键因素之。常见的直流电源拓扑结构有线性稳压电源和开关稳压电源两
    的头像 发表于 12-23 10:12 1272次阅读

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

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

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

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