c语言 状态机 pdf,计算机C语言-状态机原理详解.pdf

计算机C语言-状态机原理详解

状态机原理详解

1.什么是状态机

状态机理论最初的发展在数字电路设计领域。状态机特别适合描述那些有发

生有先后顺序,或者有逻辑规律的事情。状态机的本质就是对具有逻辑顺序或时

序规律事件的一种描述方法。状态机通过响应一系列事件而 “运行”。每个事件

都在属于 “当前” 节点的转移函数的控制范围内,其中函数的范围是节点的一

个子集。函数返回“下一个”(也许是同一个)节点。这些节点中至少有一个必

须是终态。当到达终态,状态机停止。

1.1、有限状态机

(1)常说的状态机是有限状态机FSM。FSM指的是有有限个状态 (一般是一个状态

变量的值),这个机器同时能够从外部接收信号和信息输入,机器在接收到外部

输入的信号后会综合考虑当前自己的状态和用户输入的信息,然后机器做出动

作:跳转到另一个状态。

(2)考虑状态机的关键点:当前状态、外部输入、下一个状态

以我们熟悉的水的三态变化为例,已知当前状态和输入条件,下一状态是确

定的。两个不同的状态,即使输入条件相同,下一状态一般不会相同。

1.2、两种状态机:Moore型和Mealy型

(1)Moore型状态机特点是:输出只与当前状态有关 (与输入信号无关),即可以

把Moore型有限状态的输出看成是当前状态的函数。Moore型状态机相对简单,

考虑状态机的下一个状态时只需要考虑它的当前状态就行了。

(2)Mealy型状态机的特点是:输出不只和当前状态有关,还与输入信号有关。

状态机接收到一个输入信号需要跳转到下一个状态时,状态机综合考虑2个条件

(当前状态、输入值)后才决定跳转到哪个状态。

下面举一个mealy型状态机的例子,学过数字电路的同学可能比较熟悉。

有这样一个序列检测器电路,功能是:检测出串行输入数据 (用Sin表示)

中的4位二进制序列0101(自左至右输入),当检测到该序列时,输出Out 1;没

有检测到该序列时,输出Out 0(注意考虑序列重叠的可能性,如010101,相当

于出现两个0101序列)。

经过分析,首先由于输出不仅和状态有关,而且和输入有关系可以确定采用

Mealy型状态机。该电路在连续收到信号0101时,输出为1,其他情况下输出为

0。在状态图中大圆表示状态,用连接两个大圆的箭头表示转换过程,箭头旁边

的第一个数字表示输入,/后面的数字表示输出。

其次,确定状态机的状态图,该电路必须能记忆所收到的输入数据0、连续

收到前两个数据01...可见至少要是个状态,分别用S1,S2,S3,S4,再加上电路

初始态S0。根据要求可以画出状态图:

序列检测器电路状态机的状态图

观察该图可以看出,当状态机处以S2、S4 的时候,如果输入Sin 1,则电

路会转移到相同的次态S0,如果输入Sin 0,则电路会转移到相同的次态S3,

且两种情况下输出Out都为0。所以,S2、S4为等价状态,可用S2代替S4,于

是得到简化的状态图:

序列检测器电路状态机的化简后状态图

1.3、状态机的主要用途:电路设计、FPGA程序设计、软件设计

(1)电路设计中广泛使用了状态机思想

(2)FPGA程序设计

(3)软件设计 (框架类型的设计,譬如操作系统的GUI系统、消息机制)

1.4、状态机解决了什么问题

传统应用程序的控制流程基本是顺序的:遵循事先设定的逻辑,从头到尾地

执行。很少有事件能改变标准执行流程;而且这些事件主要涉及异常情况,例如

单片机里面的中断。“命令行实用程序”是这种传统应用程序的典型例子。

另一类应用程序由外部发生的事件来驱动——换言之,事件在应用程序之外

生成,无法由应用程序或程序员来控制。具体需要执行的代码取决于接收到的事

件,或者它相对于其他事件的抵达时间。所以,控制流程既不能是顺序的,也不

能是事先设定好的,因为它要依赖于外部事件。事件驱动的GUI应用程序是这种

应用程序的典型例子,它们由命令和选择 (也就是用户造成的事件)来驱动。获

取更多视频资料欢迎加入397164505朱老师技术群。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值