状态机的一般实现

一般的状态机实现如下,定义几个不同的状态,通过switch...case...语句实现不同状态的执行。

一般小型状态机使用上述方式实现,该方法的缺点,一是如果系统稍微复杂一些,将需要定义很多状态,同时增加case的数量。二是swich...case...将变得很复杂臃肿。

状态机的高级实现

一个新的实现方法是使用函数本身作为执行的状态和保存当前的状态到函数指针。

使用函数名作为状态,这种方式的循环调用函数 state_machine_run(void * priv_data)将变得非常简练,而且能够保证每时每刻都有一个状态在执行。

以下是个随便写的简单的例子,实际比这个复杂些

#include <stdio.h>
#include <stdlib.h>void state1(void *pre_data);
void state2(void *pre_data);
void state3(void *pre_data);
void state4(void *pre_data);void (*state)(void *) = state1;void state1(void *pre_data)
{printf("起床\r\n");/*action1(); */state = state2;
}void state2(void *pre_data)
{printf("吃早饭\r\n");/*action2(); */state = state3;
}void state3(void *pre_data)
{printf("上班  \r\n");/*action3(); */state = state4;/*if(A)state = state2;elsestate = state4;*/
}void state4(void *pre_data)
{printf("疯狂打码中...\r\n");/*action4(); */getchar();exit(0);
}void state_machine_run(void *pre_data)
{while(1){state(pre_data);}
}int main()
{void *p;state_machine_run(p);return 0;
}

C语言状态机编程进阶相关推荐

  1. c语言按键状态机,C语言状态机编程思想

    原标题:C语言状态机编程思想 有限状态机概念 有限状态机是一种概念思想,把复杂的控制逻辑分解成有限个稳定状态,组成闭环系统,通过事件触发,让状态机按设定的顺序处理事务.单片机C语言的状态机编程,是利用 ...

  2. C语言状态机编程思想

    关注.星标公众号,直达精彩内容 文章来源:头条-嵌入式在左C语言在右 链接:https://www.toutiao.com/i6843028812112855564/ 有限状态机概念 有限状态机是一种 ...

  3. 【Java编程进阶】Java语言基础入门篇

    从今天开始,就要写Java编程进阶从入门到精通系列的文章啦!希望大家学习完都可以找到心仪的工作,在自己热爱的岗位上闪闪发光! 推荐学习专栏:Java 编程进阶之路[从入门到精通] 文章目录 一. 第一 ...

  4. c语言状态机实现坐标切换,C语言状态机最优模式(转)

    近来思绪有点停不下来,构思了一个GUI的框架(用在Cotex-M平台上,很小),期待以后有时间去实现,里面有一个对触摸屏的检测,自然想到使用状态机进行消息的生成和分发,于是想着实现一个状态机实现的模型 ...

  5. 视频教程-C语言核心编程-C/C++

    C语言核心编程 夏曹俊:南京捷帝科技有限公司创始人,南京大学计算机硕士毕业,有15年c++跨平台项目研发的经验,领导开发过大量的c++虚拟仿真,计算机视觉,嵌入式图像处理,云安全审计项目,比赛鹰眼系统 ...

  6. 嵌入式状态机编程简介

    不知道大家有没有这样一种感觉,就是感觉自己玩单片机还可以,各个功能模块也都会驱动,但是如果让你完整地写一套代码,却无逻辑与框架可言,上来就是开始写!东抄抄西抄抄,说明编程还处于比较低的水平.那么,如何 ...

  7. Python开发系列课程(11) - 面向对象编程进阶

    面向对象编程进阶 在前面的章节我们已经了解了面向对象的入门知识,知道了如何定义类,如何创建对象以及如何给对象发消息.为了能够更好的使用面向对象编程思想进行程序开发,我们还需要对Python中的面向对象 ...

  8. C语言基础及进阶教程(视频教程地址)

    嵌入式高级C语言进阶 C语言概述-01C语言概念.发展历史.特点 http://you.video.sina.com.cn/pg/topicdetail/topicPlay.php?tid=34635 ...

  9. C语言模块化编程样例

    模块化编程向来不是面向对象语言的专利,即使是C语言,为了降低文件.模块间的耦合度,依然要注意对变量.函数进行封装. 以下举例对C语言模块化编程进行浅析:项目中包含a.c和b.c文件,其中a.c中定义了 ...

  10. 博途PLC 1200/1500PLC ModbusTcp通信之状态机编程

    状态机的详细讲解大家可以参看专栏的其他文章,这里不在赘述.这篇博文直接给出状态机编程的代码和讲解. PLC面向对象编程系列之状态机(FSM)详解_RXXW_Dor的博客-CSDN博客_plc 状态机编 ...

最新文章

  1. CSDN付费专栏写作感悟及成长之路、兼论学习会员模式的创作者协同效应
  2. 交叉表 列字段排序_PowerBI创建日期表
  3. angular动态选择HTML模板,在angular2中动态加载HTML模板
  4. iphone模拟器快捷键使用
  5. vue项目接口地址暴露_vue组件暴露和.js文件暴露接口操作
  6. Ubuntu16.04开机引导缺失Win10
  7. 安全上下文以及FACL
  8. 恭喜你们微软论坛版主成为百度知道专家
  9. Android WebView学习
  10. WPS简历模板的图标怎么修改_新媒体运营-简历模板范文,【工作经历+项目经验+自我评价】怎么写?...
  11. 人物志 | 美团首席科学家夏华夏:不断突破边界的程序人生
  12. uefi开发环境搭建
  13. 2020厦大计算机专硕分数,2020考研初试,你得考多少分才能上厦大?
  14. 基于云开发的查单词小程序设计 报告+PPT+项目源码+演示视频
  15. HTML期末大作业课程设计~仿阴阳师游戏官网首页html模板(HTML+CSS)~动漫主题html5网页模板-HTML期末作业课程设计期末大作业动漫主题html5网页模板-html5网页设计源码...
  16. Java开源模板引擎
  17. java数据结构-动态规划算法-一次性学会
  18. FIIDO 王志凯:共享单车走到了尽头?电动自行车这才开始!
  19. Msp430学习笔记—ADC12(一)
  20. html clear 清楚li,CSS清楚浮动clear:both

热门文章

  1. gif图片解析与生成(GIF+文字动效)
  2. VMware ESXi 安装教程
  3. 关于怎么计算某一年的第一天为周几的问题
  4. Java的图标和由来
  5. 【华为HCIE考试卷在哪买?】
  6. ABB焊接机器人伺服电机维修常见故障
  7. pi控制直流电机c语言,一种基于PI控制的直流电机调速控制系统及控制方法与流程...
  8. TCP粘包产生的原因、解决办法
  9. 5年迭代5次,抖音推荐系统演进历程
  10. Java校招120道面试题目合集