程序小白
认证:优质创作者
所在专题目录 查看专题
【第一章】有限状态机理论速成笔记
【第二章】HSM层次式状态机理论(进阶版)
【第三章】有限状态机(FSM)之炸弹项目(实战1)
【第四章】有限状态机(FSM)之炸弹项目(实战2)
【第五章】有限状态机(FSM)之炸弹项目(实战3)
【第六章】层次式状态机HSM = 有限状态机FSM + 面向对象
作者动态 更多
小小调度器——开局default,优雅总藏于细节之中
04-02 09:23
小小调度器——调度器核心的纯C实现
04-01 14:09
小小调度器——原来C代码还能这么写,原作者没少挨打吧!
03-27 15:42
解析由系统库引发的hardfault血案(RT-Thread+ESP32)
2023-07-17 16:04
TINA瞬时现象仿真分析——运放缓冲器振铃
2023-02-28 11:38

【第一章】有限状态机理论速成笔记

      严格意义上来讲,状态机理论应该属于控制理论的范畴,他其实不光在软件领域发光发热,实际上他对于硬件设计更加的重要,多年前我曾读过分享过那些当年看不懂的文章,依旧给他人很大的帮助。

   

      有兴趣的童鞋可以去读一下,不论你从事软件还是硬件,都值得一读,接下来进入正题,我们来速成状态机,举个例子:

      早期的状态机控制理论(不完整)

      地震啦~!!!! 我:。。。跑~!!!(这就是状态机的早期的事件动作范型)(缺点:我是谁 ,我在哪 ,我为什么要跑?)

      完整的状态机模型(完整语义)

      地震啦~!!!

      版本一,我:我居然在大楼里~! 跑~!!!

      版本二,我:我在大草原上~!没事儿~!!!

这就是完整的状态机模型(事件-状态-动作范型),看到这里你也就学会了状态机,简不简单~!是的,状态机的初衷就是为了不制造麻烦~!

      状态机进阶(任何理论都会因实践慢慢改进丰富和进阶):

普通版状态机:

      妈妈要出门买鸡蛋了,你在家先写十分钟的作业,然后就可以看会儿动画片了,    这时候你躁动了,十分钟等于六百秒,于是开始1...2...3...600....终于可以看电视了,你再数数之前,要先想一下之前数的是几(历史就是状态),然后才知道下一个是几。要完整这件事你要数600个数,转换600中状态,什么时候转换呢,你会盯着时钟的秒表,他动一下,你加一(事件)。结果妈妈回来,发现你居然没有写作业,于是不光挨了骂,动画片也看不成了。

扩展状态机(进阶版):

      妈妈要出门买鸡蛋了,你在家先写十分钟的作业,然后就可以看会儿动画片了,   你拿过闹钟,定了一个十分钟的闹钟,然后继续写作业(状态1),十分钟后,闹钟响了(监护条件),时间到啦,你放下作业,打开电视,开始看动画片(状态2),不一会儿妈妈回来了,检查了你的作业,发现你很守信用,于是不光让你多看一会儿电视,而且还奖励了一根棒棒糖。

   总结:并不是所有的状态都要被构造成状态机,如果有很多状态其实都是一个简单的变量维护,那么可以建立一个状态机,再其内部维护这个变量,创建一个监护条件,只有等监护条件满足时,才跳转到其它状态机。

   注意:在单片机软件中构造一个状态机是需要一定内存资源开销的,想想我们那可怜的RAM,一个项目到底要分解成多少个状态机不光是技术问题,更是艺术问题。

状态机中最重要的几个概念:事件 状态 动作  (扩展状态机还有监护条件)

一个简单的状态机可以如下描述:

状态机还有个很重要的概念要RTC(Run-to-Completion):大体意思是运行到完成,这个过程是不可以打断的,因为如果被打断了,那么你就恢复现场,问题就复杂了,举个例子,闹钟响了(事件发生),我(睡眠状态)到(起床状态)需要完成的RTC如下:

伸懒腰   穿衣 穿鞋  洗漱结束。假如你在穿衣的过程中,突然接到女神的求助电话,这时候可能直接从床上跳起来,写也顾不上穿就飞奔而去,这就打乱了我们原本的状态机执行上下文,导致你鞋没穿 牙没刷出门了,理论上这是不允许的,尽管现实中是你想要的。

到这里基本就完成了传统意义上的FSM(有限状态机)的学习,理论的东西,理解就好了,详细看书可以要花个半天,当然更专业,如下:

      

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 8
收藏 11
关注 117
成为作者 赚取收益
全部留言
0/200
  • 星球居民-jwDCpCfn 2020-09-03 09:46
    老师好,请问最后一张图出自那本书?
    回复 1条回复