当前位置: 首页 > news >正文

状态机的介绍

1、有限状态机

(1)常说的状态机是有限状态机FSM。

  • 有限状态机即状态数量是有限的,一般用状态变量的不同值表示不同状态。
  • 状态机同时能够从外部接收信号,机器在接收到外部输入的信号后会综合考虑当前自己的状态,然后机器做出动作:跳转到另一个状态。

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

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

        状态机主要分为 有限状态机(FSM)无限状态机(ISM),但 无限状态机 在实际工程中几乎不用(因为无法建模和验证),所以我们通常说的“状态机”默认是 有限状态机(FSM)。有限状态机(FSM)的 2 种主流形式:Moore型和Mealy型

(1)Moore型

  • 输出只取决于当前状态。
  • 相对简单,考虑状态机的下一个状态时只需要考虑它的当前状态就行了。

(2)Mealy型

  • 输出取决于当前状态 + 输入
  • 状态机接收到一个输入信号需要跳转到下一个状态时,状态机综合考虑2个条件(当前状态、输入值)后才决定跳转到哪个状态。

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

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

(2)FPGA程序设计。

(3)软件设计

4、C语言实现简单的状态机

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

(2)程序

#include <stdio.h>
#include <ctype.h>// 定义状态枚举
typedef enum
{STATE_START,    // 初始状态STATE_1,        // 已输入1位正确密码STATE_2,        // 已输入2位正确密码STATE_3,        // 已输入3位正确密码STATE_UNLOCKED  // 开锁成功状态
} State;int main()
{// 预设密码(可修改)const char *password = "1234";const int password_length = 4;State current_state = STATE_START;  // 初始状态int input_char;printf("请输入%d位数字密码(输入错误会重置,连续正确即可开锁):\n", password_length);while (1){input_char = getchar();  // 读取用户输入// 跳过换行符(允许用户按回车提交)if (input_char == '\n')continue;// 非数字字符处理:重置状态机if (!isdigit(input_char)){current_state = STATE_START;continue;}// 状态转移逻辑switch (current_state){case STATE_START:current_state = (input_char == password[0]) ? STATE_1 : STATE_START;break;case STATE_1:current_state = (input_char == password[1]) ? STATE_2 : STATE_START;break;case STATE_2:current_state = (input_char == password[2]) ? STATE_3 : STATE_START;break;case STATE_3:current_state = (input_char == password[3]) ? STATE_UNLOCKED : STATE_START;break;case STATE_UNLOCKED:// 保持开锁状态不变break;}// 检测开锁成功if (current_state == STATE_UNLOCKED){printf("开锁成功!\n");return 0;  // 程序退出}}return 0;
}

http://www.dtcms.com/a/496073.html

相关文章:

  • 算法---位运算
  • 如何使用python创建和维护sqlite3数据库
  • 顺德手机网站设计咨询用什么做网站后台
  • 深圳企业网站建设服务网站客户需求分析
  • 大模型 | VLM 初识及在自动驾驶场景中的应用
  • Android CarService调试操作
  • 建设部网站哪里可以报名考监理员聚名网域名注册官网
  • 一个坐标转换
  • 南京文化云网站建设群晖nda做网站
  • 网站开发一次性费用国外服务器免费ip地址
  • 一个虚拟空间做两个网站网站开发的技术流程图
  • wordpress建站全教程设计师网站资源
  • 公司网站建设记哪个科目网站目的
  • 连云港网站建设费用wordpress flash插件下载
  • 做模型找三视图那些网站深圳做网站收费
  • 不建议网站北京优化核酸检测
  • 网站的开发语言有哪些鞍钢建设集团网站
  • 山东省某三甲医院基于分类分级的数据安全防护建设实践
  • (六)构建多智能体旅行客服-如何切换智能体角色
  • SpringCloud-基础
  • 如何将一加手机的文件传输到 Mac
  • 使用腾讯云云开发(CloudBase)的云函数,删除云存储中指定目录下的过期文件
  • 佛山网站开发公司电话盐山建网站
  • 青岛 机械 中企动力提供网站建设网络营销有什么行业
  • react+springboot的Docker部署
  • Spring依赖注入
  • 网站代码如何做优化金融投资网站方案
  • 深度剖析:KWDB SQL 编译与优化策略
  • 前端学习 10-3 :验证中的SV
  • Linux小课堂: 用户管理与权限控制机制详解