0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

简单的状态机入门知识详解

电子设计 来源:电子设计 作者:电子设计 2020-12-24 18:06 次阅读

大家晚上好,今天给大家分享一个篇关于状态机的学习。为啥突然会写这个话题,因为今天要看文章和视频学习的时候,突然看到了“状态机”三个字,也突然让我想起了,在刚入职一家公司的时候,看产品的源代码画出整个软件框架流程图来,现在我还清晰的记得当时公司产品里面就有用到这个状态机的用法,但是当时我刚接触到这个东西,看了老半天那个源码吗,没看懂,因为那时候第一次看那么大的工程量代码,说实话脑袋有点晕晕的,不是很习惯。所以今天的文章只是带大家入门和了解一下状态机,等你真正在工作当中有遇到这个状态机作为开发需要的话,你再去深入研究。

一、什么是状态机?

1、有限状态机:

常说的状态机是有限状态机FSM(Finite State Machine)。FSM指的是有有限个状态(一般是一个状态变量的值),这个机器同时能够从外部接收信号信息输入,机器在接收到外部输入的信号后会综合考虑当前自己的状态和用户输入的信息,然后机器做出动作:跳转到另一个状态。

举个实际生活例子来理解一下,比如我们平时烧开水喝,在你没烧之前,水的状态是液态的,但是当你把外界温度一升高,水达到它的沸点之后,就会形成水蒸气;当你把外界温度降下来,水蒸气就有会变成液态的水了。这里是外界条件是温度,温度的变化会引起水的状态的变化。这个例子可以和我们的状态机来做一个简单的思想对比。

2、考虑状态机的关键点:

从刚才的定义来看,我们只要抓住状态机的关键点来理解就行:

1、外部输入

2、当前状态

3、下一个状态

二、两种状态机类型:

(1)Moore型状态机特点是:输出只与当前状态有关(与输入信号无关)。相对简单,考虑状态机的下一个状态时只需要考虑它的当前状态就行了。

(2)Mealy型状态机的特点是:输出不只和当前状态有关,还与输入信号有关。状态机接收到一个输入信号需要跳转到下一个状态时,状态机综合考虑2个条件(当前状态、输入值)后才决定跳转到哪个状态。

三、状态机的常见用途:

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

(2)FPGA程序设计。

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

四、状态机解决了什么问题:

(1)我们平时写程序都是顺序执行的,这种程序有个特点:程序的大体执行流程是既定的,程序的执行是遵照一定的大的方向有迹可寻的。

(2)但是偶尔会碰到这样的程序:外部不一定会按照既定流程来给程序输入信息,而程序还需要完全能够接收并响应外部的这些输入信号,还要能做出符合逻辑的输出。

五、实战例子:

开锁状态机。功能描述:用户连续输入正确的密码则会开锁,如果密码输入过程错误则锁会退回到初始状态重新计入密码,即:用户只需要连续输入出正确的密码即可开锁(输入错误不用撤销、也不用删除)。

#include <stdio.h>

// 给状态机定义状态集

typedef enum

STATE1,

STATE2,

STATE3,

STATE4,

STATE5,

STATE6,

STATE7,

}STATE;

int main(void)

int num = 0;

// current_state记录状态机的当前状态,初始为STATE1,用户每输入一个正确的

// 密码STATE就走一步,一直到STATE为STATE7后锁就开了;其中只要有一次用户

// 输入对不上就回到STATE1.

STATE current_state = STATE1; // 状态机初始状态为STATE1

// 第一步:实现一个用户循环输入密码的循环

printf("请输入密码,密码正确开锁.");

while (1)

scanf("%d", &num);

printf("num = %d.", num);

// 在这里处理用户的本次输入

switch (current_state)

case STATE1:

if (num == 1)

current_state = STATE2; // 用户输入对了一步,STATE走一步

else

current_state = STATE1;

break;

审核编辑:符乾江
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 状态机
    +关注

    关注

    2

    文章

    492

    浏览量

    27541
  • fsm
    fsm
    +关注

    关注

    0

    文章

    35

    浏览量

    12825
收藏 人收藏

    评论

    相关推荐

    Simulink中的状态机建模方法 Simulink数据可视化与分析功能

    1. Simulink中的状态机建模方法 1.1 理解状态机的基本概念 在开始建模之前,了解状态机的基本概念是必要的。状态机由以下几个部分组成:
    的头像 发表于 12-12 09:27 415次阅读

    基于状态机和面向对象的思想设计按键检测模块

    嵌入式入门学习的教程里面,按键原理普遍被认为是“很简单”的知识点之一,按键输入检测的原理,无非就是通过CPU不断扫描按键引脚的电平状态,或者采用单片
    的头像 发表于 11-14 11:44 243次阅读
    基于<b class='flag-5'>状态机</b>和面向对象的思想设计按键检测模块

    触发器和状态机的关系是什么

    触发器和状态机在数字电路设计中有着紧密的关系,它们共同构成了时序逻辑电路的基础,用于实现数据的存储、处理和传输。
    的头像 发表于 08-12 11:24 459次阅读

    如何在FPGA中实现状态机

    在FPGA(现场可编程门阵列)中实现状态机是一种常见的做法,用于控制复杂的数字系统行为。状态机能够根据当前的输入和系统状态,决定下一步的动作和新的状态。这里,我们将详细探讨如何在FPG
    的头像 发表于 07-18 15:57 603次阅读

    玩转Spring状态机

    说起Spring状态机,大家很容易联想到这个状态机和设计模式中状态模式的区别是啥呢?没错,Spring状态机就是状态模式的一种实现,在介绍S
    的头像 发表于 06-25 14:21 953次阅读
    玩转Spring<b class='flag-5'>状态机</b>

    关于SMU状态机的问题求解

    我有一些关于 SMU 状态机的问题。 假设由于某种原因,SMU 已进入故障状态。 手册指出,要返回运行状态并将 FSP 恢复到无故障状态,应调用IfxSmu_releaseFSP()。
    发表于 05-29 08:18

    使用系统滴答定时中断,基于按键的状态机怎么只能1个1个+,不能连+?

    使用系统滴答定时中断,基于按键的状态机怎么只能1个1个+,不能连+ #define KEY1_USERGPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13
    发表于 05-16 06:27

    请问STM32F051用了操作系统RTX后还需要写状态机不?

    现在学会了rtx操作系统后,原来用状态机的学的程序,可不可以不切割,直接单线程来执行列?各位前前辈指点一下。多谢!
    发表于 05-08 06:11

    在Verilog中实现Moore型和Mealy型状态机的方法简析

    编写能够被综合工具识别的状态机,首先需要理解状态机的基本概念和分类。状态机(FSM)是表示有限个状态以及在这些状态之间转换的逻辑结构。
    的头像 发表于 05-01 11:38 1621次阅读

    求助LabVIEW,状态机里面反馈节点如何初始化问题

    求助labview,状态机里面反馈节点如何初始化,下次执行这个状态的时候初始化一次!谢谢谢谢!
    发表于 03-25 18:17

    如何采用“状态机”解析UART数据帧

    如果一个系统接收上述“不定长度”的协议帧,将会有一个挑战--如何高效接收与解析。 为简化系统设计,我们强烈建议您采用“状态机”来解析UART数据帧。
    的头像 发表于 03-25 14:29 698次阅读
    如何采用“<b class='flag-5'>状态机</b>”解析UART数据帧

    请问GPIF状态机的内部信号需要延迟才能断言吗?

    dma_wm_thn 这样的过渡触发器需要一些周期的延迟才能断言吗? 在我的实践中,DMA_WM_THN 触发器似乎有 1 个时钟周期延迟:   图像是我的状态机的一部分,数据总线是 32 位
    发表于 02-23 07:43

    什么是有限状态机?如何解决传统有限状态机状态爆炸」问题?

    有限状态机(Finite State Machine,简称FSM)是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列以及如何响应来自外界的各种事件。
    的头像 发表于 02-17 16:09 6254次阅读
    什么是有限<b class='flag-5'>状态机</b>?如何解决传统有限<b class='flag-5'>状态机</b>「<b class='flag-5'>状态</b>爆炸」问题?

    Verilog状态机+设计实例

    在verilog中状态机的一种很常用的逻辑结构,学习和理解状态机的运行规律能够帮助我们更好地书写代码,同时作为一种思想方法,在别的代码设计中也会有所帮助。 一、简介 在使用过程中我们常说
    的头像 发表于 02-12 19:07 4149次阅读
    Verilog<b class='flag-5'>状态机</b>+设计实例

    状态机该怎么监控

    状态机卡住的场景——通过状态跳转条件的DFX信号去判断卡住的原因
    的头像 发表于 01-15 10:03 420次阅读
    <b class='flag-5'>状态机</b>该怎么监控