状态机编程的历史很可能久于传统的操作系统, 传统的一个大while 循环模式普遍用到了状态机模式编程, 状态机一般是基于fsm 的有限状态机,或者更先进点的是hsm 分层的状态机。具体的fsm 以及hsm 状态机的概念读者自行参考有关概念学习,这里不再表述。推荐看Practical UML Statecharts in c/c++这本书。raw os的状态机理念,很大部分参考了它,和著名的面向事件的操作系统QP 具有异曲同工之妙。

状态机编程的其中一个优势是所有的任务可以共享一个栈,这样可以避免传统的操作系统一个任务一个栈空间的局限。所以能普遍被资源短缺的单片机系统采用,另外一个优势是面对复杂的逻辑时,往往能化繁为简,出奇制胜。

由于状态机的特殊编程机制,状态机往往配合事件驱动机制来配合一起使用。

raw os巧妙地把状态机编程引进到了空闲任务里,这样的话系统空闲的时候可以进行面向状态机的编程,更进一步发挥出系统使用的效率。

读者感兴趣的可以参考状态机代码raw_stm.c 以及基于事件驱动机制的状态机代码raw_idel_event.c.具体的测试代码可以打开vc 的测试代码main,c 启动stm_test。

stm_test 这个例子里运用fsm 状态机实现了一个软件的炸弹模型,读者可以自行测试。

raw os 之状态机编程相关推荐

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

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

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

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

  3. 【智能车竞赛】状态机编程在智能车竞速赛道中的应用 - 编程小记

    我曾试图通过一些代码上的小技巧,优化智能车竞速赛道的元素处理逻辑. 后来学长告诉我这叫做 "状态机" . --2022.07.20 一.我们为什么需要状态机? 定宽的白色赛道,在深 ...

  4. 博途PLC 1200/1500PLC MODBUS-RTU通讯优化(状态机编程)

    博途MODBUS-RTU通信详细设置可以参看下面这篇文章,本篇文章给出MODBUS轮询的优化写法(基于状态机编程).限于本人能力和水平,文中难免出现错误和不足之处,诚恳的欢迎大家批评指正,同时感谢大家 ...

  5. STM32状态机编程实例——全自动洗衣机(上)

    前面几篇文章,以按键功能,介绍了状态机的原理与按键状态机实例,实现按键单击.双击.长按等状态的检测. 本篇,继续使用状态机编程,来实现一个更有趣的功能--全自动洗衣机. 1 全自动洗衣机功能分析 下面 ...

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

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

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

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

  8. 排线电机运行控制(梯形图状态机编程)

    这篇博客主要分析排线电机的逻辑时序动作控制,有关排线电机的速度控制(比例随动编程应用)可以参看相关的文章,有详细算法和源代码分析: 绕线机-排线伺服速度解算FC(比例随动编程应用)_RXXW_Dor的 ...

  9. PLC状态机编程(沿指令使用注意事项)

    有关PLC的状态机编程详细内容,请参看下面的文章链接: PLC面向对象编程系列之有限状态机(FSM)详解_RXXW_Dor的博客-CSDN博客_plc面向对象编写PLC控制机器动作类程序时,当分支比较 ...

  10. 状态机编程思想:删除代码注释(支持C/C++和Java)

    前言 有时为了信息保密或是单纯阅读代码,我们需要删除注释. 之前考虑过正则表达式,但是感觉实现起来相当麻烦.而状态机可以把多种情况归为一类状态再行分解,大大简化问题.本文就是基于状态机实现的. 删除C ...

最新文章

  1. Failure [DELETE_FAILED_INTERNAL_ERROR]的解决办法
  2. 【计算机学科】最好的学校排名
  3. 两亿人在家开会!钉钉紧急扩容1万台云服务器
  4. 23种设计模式[1]:单例模式
  5. oracle dba开头的表,oracle中以dba_、user_、v$_、all_、session_、index_开头的常用表和视图...
  6. VIRT,RES,SHR,虚拟内存和物理内存(转)
  7. 关于创建对象的几个问题,拨云见日
  8. java linux怎么抓tcp包_Linux使用tcpdump抓取网络数据包示例
  9. 采用传输矩阵法求解光子晶体带隙
  10. CocosCreator-IOS 开发篇
  11. Word VBA-图片操作汇总
  12. 图书馆管理系统的c语言,图书馆管理系统 c语言.doc
  13. 服务器装凤凰系统,云服务器安装凤凰os
  14. python adsl自动拨号代码
  15. 35岁后,互联网数据分析人的出路在哪里?
  16. vue中实现 楼层效果
  17. 无绿幕实景抠图、AI抠图
  18. 联想计算机电源风扇怎样清理,电脑风扇怎么拆开清洗_电脑风扇的三根线的作用...
  19. Coinversation 官方入驻 CoinAsk.io
  20. UI设计师整体工作流程!

热门文章

  1. 基础篇必看,史上最全的iOS开发教程集锦,没有之一
  2. 51单片机——LED流水灯
  3. 中科院分区基础版和升级版究竟有何区别?
  4. 高手的思维与打法:灰度思维,黑白决策
  5. 微信小程序学习笔记:选项卡
  6. 计算机考研如何选?中国人民大学学长两年考研经验+权威预测
  7. 等保二级与等保三级的四大区别分析-行云管家
  8. 光盘安装服务器找不到硬盘,安装系统找不到硬盘怎么办实测解决
  9. 通达信手机版分时图指标大全_通达信精选指标——挣开眼就买卖版指标详解
  10. VBA Excel 实践(三)Excel控件及Excel控件的初始化