什么是状态机?状态机编程浅析。

什么是状态机?

状态机定义

状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。
有限状态机简写为FSM(Finite State Machine),主要分为2大类:
第一类,若输出只和状态有关而与输入无关,则称为Moore状态机
(组合逻辑电路实现)
第二类,输出不仅和状态有关而且和输入有关系,则称为Mealy状态机
(时序逻辑电路实现)

重要概念

状态机中有几个术语:state(状态) 、transition(转移) 、action(动作) 、transition condition(转移条件) 。

state(状态) :将一个系统离散化,可以得到很多种状态,当然这些状态是有限的。例如:门禁闸机可以划分为开启状态、关闭状态;电扇可以划分为关、一档、二档、三档等状态。

transition(转移) :一个状态接收一个输入执行了某些动作到达了另外一个状态的过程就是一个transition(转移)。定义transition(转移)就是在定义状态机的转移流程。

transition condition(转移条件) :也叫做Event(事件),在某一状态下,只有达到了transition condition(转移条件),才会按照状态机的转移流程转移到下一状态,并执行相应的动作。

action(动作):在状态机的运转过程中会有很多种动作。如:进入动作(entry action)[在进入状态时进行]、退出动作(exit action)[在退出状态时进行]、转移动作[在进行特定转移时进行]。

通俗解释

举个最简单的例子,人有三个状态:健康,感冒,康复中。触发的条件有淋雨(t1),吃药(t2),打针(t3),休息(t4)。所以状态机就是健康-(t4)->健康;健康-(t1)->感冒;感冒-(t3)->健康;感冒-(t2)->康复中;康复中-(t4)->健康,等等。就是这样状态在不同的条件下跳转到自己或不同状态的图。

状态机有什么用?

嵌入式开发过程中,状态机是一种很重要的开发模型,特别是在单片机开发过程中,如果能将功能限制到几个有限的状态,状态机就能派上大用场。

两个重点

将状态机进一步精简,需要注意当前状态转换条件这两个条件。状态机复位进入固定状态,在当前的状态中会做两件事。
(1)重复执行当前状态内的工作。
(2)不断检测状态转移条件,符合则转移。
开机时,进入状态s0,一边执行该状态内的动作,一边检测x=0?或x=1?,一旦满足某一条件就会转移到相应的状态(x=0转移到s4,x=1转移到s1)。
在这里插入图片描述

状态机编程

在嵌入式产品开发时,我们可以将不同的功能当作不同的状态,时间,变量和输入操作作为转移条件,产品的功能就是不同状态之间的转换来实现的。状态机编程通常需要经历三个步骤。
(1)分析功能需求,提取状态。
(2)画出状态图,理清转换关系和转换条件。
(3)明确各状态应实现的功能。

举例说明

我们以开发洗衣机为例子,简述状态机编程思想。
(1)洗衣机的功能主要有三个,根据功能我们提取九个状态。
在这里插入图片描述
(2)按步骤绘制状态图,首先标注状态。
在这里插入图片描述
然后,标明状态转移关系。
在这里插入图片描述
最后,标注转移条件。
在这里插入图片描述
(3)根据需求补全各状态内要实现的功能,比如自检时,进行各部件的初始化,并检测是否成功。报警时蜂鸣器发出响声。

至此,状态机编程已经建立,后续即可按照我们理清的思路,进行代码实现工作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值