有限状态机FSM思想广泛应用于硬件控制电路设计,也是软件上常用的一种处理方法软件上称为FMM有限消息机。它把复杂的控制逻辑分解成有限个稳定状态,在每个状态上判断事件,变连续处理为离散数字处理,符合计算机的工作特点。同时,因为有限状态机具有有限个状态,所以可以在实际的工程上实现。但这并不意味着其只能进行有限次的处理,相反,有限状态机是闭环系统,有限无穷,可以用有限的状态,处理无穷的事务。
有限状态机的工作原理如图1所示,发生事件eve
t后,根据当前状态cur_state,决定执行的动作actio
,并设置下一个状态号
xt_state。
执行动作actio
发生事件eve
tcur_state
设置下一状态号
xt_state
当前状态
图1有限状态机工作原理
e0a0
e0a0S0
e1a1
e2a2
V
S2S1
e2a2图2一个有限状态机实例
当前状态s0s1s2事件
a0s0a0s0e0
a1s1e1
a2s2a2s2e2
f表1图2状态机实例的二维表格表示动作下一状态
图2为一个状态机实例的状态转移图,它的含义是:在s0状态,如果发生e0事件,那么就执行a0动作,并保持状态不变;如果发生e1事件,那么就执行a1动作,并将状态转移到s1态;如果发生e2事件,那么就执行a2动作,并将状态转移到s2态;在s1状态,如果发生e2事件,那么就执行a2动作,并将状态转移到s2态;在s2状态,如果发生e0事件,那么就执行a0动作,并将状态转移到s0态;
有限状态机不仅能够用状态转移图表示,还可以用二维的表格代表。一般将当前状态号写在横行上,将事件写在纵列上,如表1所示。其中“”表示空不执行动作,也不进行状态转移,“a
s
”表示执行动作a
同时将下一状态设置为s
。表1和图2表示的含义是完全相同的。
观察表1可知,状态机可以用两种方法实现:竖着写在状态中判断事件和横着写在事件中判断状态。这两种实现在本质上是完全等效的,但在实际操作中,效果却截然不同。
竖着写在状态中判断事件C代码片段
cur_state
xt_state
switchcur_state
在当前状态中判断事件
cases0
在s0状态
ife0_eve
t
如果发生e0事件,那么就执行a0动作,r