设计状态机时,先画转换条件,再画状态

发布时间:2026/10/1 13:07:09

设计状态机时,先画转换条件,再画状态
一句话: 很多人设计状态机先枚举有哪些状态再想怎么转换容易漏掉转换路径。反过来先画条件矩阵——每个条件组合下应该发生什么——状态自然浮现。适合谁读适合嵌入式开发者、单片机初学者及遇到类似问题的工程师常规做法的问题拿到需求第一反应是列状态IDLE → STARTING → RUNNING → FAULT → ...然后想从 IDLE 怎么到 STARTING从 STARTING 怎么到 RUNNING这种做法容易漏正在 STARTING 时收到关断指令 → 没画这条线已经在 FAULT 了又收到关断 → 没画这条线关断后又收到开机 → 会不会重开不知道先枚举状态再想转换 从答案反推条件容易漏。反过来先列条件矩阵条件 1: 触发标志 0 还是 1 条件 2: 当前在什么状态两个条件的组合穷举触发标志当前状态应该发生什么0IDLE什么都不做0非 IDLE关断回 IDLE1IDLE启动序列第一步1非 IDLE继续当前序列状态名IDLE / STARTING / RUNNING是后来加的——条件矩阵先写好了状态只是给每个组合取的名字。为什么这样做先枚举状态先画条件矩阵2^4 16 种条件组合只覆盖了 4 种16 种全列出来每个都明确容易漏转换路径不可能漏——每个组合都有答案新增条件要改所有状态新增条件加一列就行穷举不是笨办法——嵌入式状态机的条件数通常 ≤ 3最多 8 种组合。全列出来比漏掉强。经验条件矩阵先写状态名后取。每个条件组合下的行为定了状态自然浮现。多标志方案的状态空间藏着非法组合。5 个标志 32 种组合只有 4 种合法。两个变量 4 种全部合法。变量越少越不容易出 bug。有用的话点个收藏下次调试直接用。有问题欢迎评论区交流看到了都会回。下一篇dead-code-chain-deletion——状态机、编码规范、编译链接——每个嵌入式新人都要过的三道坎

相关新闻

改完Keil工程文件被缓存覆盖?——uvprojx编辑的进阶四坑

改完Keil工程文件被缓存覆盖?——uvprojx编辑的进阶四坑

2026/9/30 7:24:11

一句话: 上一篇《Keil工程XML编辑5次失败》讲了基本流程。本文进阶——Perl 静默失败的根因、Keil 缓存回写的时间点、uvoptx 里有 uvprojx 没有的东西、sed 一刀切误伤活跃代码。如果你不止删文件,还要批量改工程配置,这四条会帮你少踩一轮坑。 适合谁读…

KAN网络:新一代可解释神经网络架构解析

KAN网络:新一代可解释神经网络架构解析

2026/9/30 22:26:40

1. KAN网络是什么?为什么它能引发热议?KAN(Kolmogorov–Arnold Networks)是2024年由MIT、加州理工等机构提出的全新神经网络架构。它的核心创新点在于对传统MLP(多层感知器)做了一个看似简单却影响深远的改…

XHRefreshControl性能优化技巧:让你的iOS应用流畅如丝

XHRefreshControl性能优化技巧:让你的iOS应用流畅如丝

2026/9/29 9:55:07

XHRefreshControl性能优化技巧:让你的iOS应用流畅如丝 【免费下载链接】XHRefreshControl XHRefreshControl 是一款高扩展性、低耦合度的下拉刷新、上提加载更多的组件。 项目地址: https://gitcode.com/gh_mirrors/xh/XHRefreshControl XHRefreshControl是一…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/29 22:00:59

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/30 20:35:35

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/30 20:35:38

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/30 20:35:36

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/30 20:35:33

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/30 8:20:32

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…