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

    文章

    497

    浏览量

    28845
  • fsm
    fsm
    +关注

    关注

    0

    文章

    36

    浏览量

    13074
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    睿远研究院丨IO-Link规范解读(十一):ISDU状态机与EVENT事件

    上篇我们介绍了ISDU的典型编码格式和应用案例,本篇我们就来详细介绍下,ISDU的状态机,并把EVENT事件的逻辑,给大家好好解析下。 1主站ISDU状态机 如上图所示,ISDU的状态机的核心
    的头像 发表于 11-29 18:28 2651次阅读
    睿远研究院丨IO-Link规范解读(十一):ISDU<b class='flag-5'>状态机</b>与EVENT事件

    什么是状态机

    什么是状态机状态机(state machine)有5个要素: 状态(state) 迁移(transition) 事件(event) 动作(action) 条件(guard) 状态
    发表于 11-27 08:15

    嵌入式开发为何经常用到状态机架构

    一个管脚电平跳变或者一个串口数据,让整个程序都不动的情况也让我非常纠结,如果事件一直不发生电平跳变,你要等到世界末日么? 如果应用状态机编程思想,程序只需要用全局变量记录下工作状态,就可以转头去干别的
    发表于 11-25 07:08

    睿远研究院丨IO-Link规范解读(八):M-Sequence Type 与消息处理状态机

    丢弃,减少后端工作量。 那么今天我们就来深入研究下,消息处理模块中提到的各类M-Sequence,以及主从站的消息处理状态机!   1 M-Sequence Type 上回讲到主站发出来的MC和CKT
    的头像 发表于 11-07 16:18 5601次阅读
    睿远研究院丨IO-Link规范解读(八):M-Sequence Type 与消息处理<b class='flag-5'>状态机</b>

    睿远研究院丨IO-Link规范解读(六):主从站状态机解析

    前言 书接上文,今天我们就来好好聊聊主从站的DL-Mode状态机,还请各位童鞋前排坐好! 1主站状态机解析 主站的DL-Mode状态机有5个大状态,也是我们很熟悉的 建立通信、开始、预
    的头像 发表于 10-28 17:34 5752次阅读
    睿远研究院丨IO-Link规范解读(六):主从站<b class='flag-5'>状态机</b>解析

    JTAG标准的状态机实现

    JTAG作为一项国际标准测试协议(IEEE1149.1兼容),主要用于芯片内部测试和调试。目前的主流芯片均支持JTAG协议,如DSP、FPGA、ARM、部分单片等。标准的JTAG接口是20Pin,但JTAG实际使用的只有4根信号线,再配合电源、地。
    的头像 发表于 08-21 15:12 2053次阅读
    JTAG标准的<b class='flag-5'>状态机</b>实现

    请问如何在FX10上使用GPIF III状态机 *.h 文件?

    LVCMOS 2 位 SlaveFIFO GPIF III 状态机的演示中有一个 cy_gpif_header_lvcmos.h 文件。 我想知道如何使用.h文件,只需放入.h文件放入 FX10 项目? 您有它的用户指南文档吗?
    发表于 07-16 08:17

    NVMe高速传输之摆脱XDMA设计之十:NVMe初始化状态机设计

    1为NVMe配置初始化状态机状态转移图。各状态的说明如下: 图1NVMe初始化状态转移图 IDLE:空闲状态,复位后的初始
    发表于 07-05 22:03

    NVMe高速传输之摆脱XDMA设计之八:PCIe初始化状态机设计

    PCIe配置初始化状态机实现PCIe设备枚举和配置空间初始化过程,在完成链路训练后,使用DFS(深度优先搜索)算法枚举PCIe总线上的设备,完成PCIe总线域的地址分配和设备的初始化。PCIe配置
    发表于 07-05 22:00

    有可能在 FX3 GPIF2 中创建两个独立的状态机吗?

    我想,如果我想通过 FX3 GPIF2 创建两个独立的传输流接口,我需要在 GPIF2 设计器中创建两个独立的状态机,我是否有可能在 GPIF2 设计器中创建两个独立的状态机
    发表于 05-20 06:14

    cypress3014视频格式改变的话,GPIF状态机需不需要重新配置?

    你好,请问视频格式改变的话,GPIF状态机需不需要重新配置
    发表于 05-14 07:28

    求助,关于srammaster.cydsn中状态机的问题求解

    晚上好。 我目前正在学习 GPIF II。 查看..EZ-USB FX3 SDK1.3firmwaregpif_examplescyfxsrammastersrammaster.cydsn中的状态机,有状态START和START1。 这意味着什么?
    发表于 05-12 06:20

    高速ssd存储系统中数据缓存控制器流程控制设计

    高速SSD系统中流程控制模块设计。该模块主要由寄存器、读状态机、写状态机和命令生成模块组成,系统介绍各模块功能。
    的头像 发表于 04-14 10:43 646次阅读
    高速ssd存储系统中数据缓存控制器流程控制设计

    如何快速入门PLD电路设计

    基本的数字逻辑概念,如与、或、非、异或等逻辑门。 布尔代数 :掌握布尔代数的基本原理,这对于设计复杂的逻辑电路至关重要。 状态机 :学习有限状态机(F
    的头像 发表于 01-20 09:48 1472次阅读

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

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