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

状态机的设计流程

SM的设计
以红绿灯🚥系统为例,进行状态机设计流程的讲解

第一步:明确系统功能需求(What?)

  • 有哪些状态 有三种状态:红灯、黄灯、绿灯
  • 状态之间怎么切换
    • 状态按顺序循环:绿灯5 秒 → 黄灯2 秒 → 红灯5 秒 → 绿灯
  • 是否有外部事件影响? 没有外部事件

结论:这是一个定时驱动的循环状态机

第二步:有哪些状态? 列出所有状态(States)及含义

  • GREEN、YELLOW和RED

第三步:状态怎么跳? 定义状态转移逻辑(Transitions)

确定转移条件:这里是“时间”

  • GREEN → YELLOW:绿灯持续5秒后
  • YELLOW → RED:黄灯持续2秒后
  • RED → GREEN:红灯持续5秒后

第四步:每个状态做什么? 确定每个状态的行为(Actions)

每个状态通常有两个行为:进入和运行

交通灯状态动作表

状态 Enter 动作 Run 动作
GREEN 打印"绿灯亮起" 倒计时,计满5秒后状态切换
YELLOW 打印"黄灯亮起" 倒计时,计满2秒后状态切换
RED 打印"红灯亮起" 倒计时,计满5秒后状态切换

第五步:选择状态机实现模式

模式 适用场景
switch-case 状态少、逻辑简单
函数指针表(表格驱动) 状态较多、结构清晰、易扩展

第六步:设计状态变量和驱动机制

  • 当前状态变量
State_t currentState = STATE_RED;  // 初始状态
  • 驱动机制(主循环)
while (1) {StateTable[currentState].Run();   // 执行当前状态的运行逻辑delay(1000);                      // 模拟1秒间隔
}
http://www.sczhlp.com/news/10456/

相关文章:

  • (自适应手机端)消防设备网站pbootcms模板
  • 金仓数据库物理备份还原
  • (自适应手机端)导航网站模板 网站目录源码下载
  • (自适应手机端)网址发布页pbootcms网站模板
  • 7.2.1 十二重计数法
  • (自适应手机端)驾校网站模板 驾照考证网站源码下载
  • 让sql service 只有只读权限
  • 【小白学算法】IDA*搜索算法超详细解析+例题[洛谷]P2324 [SCOI2005] 骑士精神
  • MyEMS开源能源管理系统:双碳时代的能源革命引擎
  • 儿童饮食
  • (PC+WAP)油漆涂料网站模板 家装网站源码下载
  • 开源能源管理系统应用前景:以 MyEMS 为例
  • 国产化Word处理控件Spire.Doc教程:如何用 Python 统计 Word 文档中的词频
  • 工业相机终极指南:驱动现代智能制造的核心“慧眼”
  • 题解:P6976 [NEERC 2015] Distance on Triangulation
  • Typora 1.9.5 已激活版本
  • 3D文档控件Aspose.3D实用教程:在 C# 中将 3MF 文件转换为 STL
  • 测试用例怎么写?工具有哪些?
  • SVN 清理失败问题
  • (PC+WAP)红色破碎设备网站模板 通用机械设备网站源码下载
  • 解决 `/usr/bin/ld: cannot find -lstdc++` 链接错误
  • 需求评审时,如何让开发主动说“这个用例写得好”?
  • Flutter SizeTransition:让你的UI动画更加丝滑
  • Flask 核心知识点
  • websocket路由封装示例
  • 2025年Python 3.12.0软件包安装使用指南
  • ESP32 + INMP441 + MAX98357A
  • Windows Server 2012虚拟机 时间同步不生效
  • Jackknife
  • php 图片清理工具web版