- 1
- 2
- 3
- 4
- 5
从switch-case到表驱动
资料介绍
从switch-case到表驱动 嵌入式状态机的组织方式与代价——一次重构的完整记录 目录 Q1:概述——为什么状态机会写成八百行的switch Q2:工作原理——三种实现方式的本质差别 Q3:关键参数——状态数量、事件队列与响应延迟 Q4:应用设计——分层状态机在设备控制中的落地 Q5:常见问题——那些年踩过的状态机坑 Q6:小结——我现在的固定做法 Q1:概述——为什么状态机会写成八百行的switch 我第一份工作接手的一个温控设备固件,主控函数的switch-case写了八百多行。每个case里面有十几个if,嵌套最深的有五层。当时我改一个"报警复位"的逻辑,花了整整两天才敢提交。 这份代码的问题不在于用了switch,而在于把"状态转移"和"业务动作"混在一起写。状态机本身是清晰的,但代码里看不出状态之间的关系,只能靠注释硬记。更麻烦的是,每加一个状态,就要在多个case里补分支,漏一处就有隐患。 后来我把这份代码重构了三遍,从switch-case到表驱动,再到分层状态机。每一次重构都让我对"什么是好的状态机组织"有了新的理解。这篇文字就是这三次重构的经验总结,按问答的方式展开。 Q2:工作原理——三种实现方式的本质差别 问:状态机到底有几种写法? 答:工程上常用的有三种:嵌套switch、表驱动、状态模式(面向对象)。三者的本质差别在于"状态转移关系存在哪里"。 嵌套switch把转移关系存在代码结构里,靠case和if的嵌套层次隐式表达。它的优点是直观、无额外开销,缺点是状态一多就难以维护,且无法在运行时查询。 表驱动把转移关系存在数据表里,代码只负责查表和执行动作。它的优点是结构清晰、易于扩展,缺点是需要额外定义动作函数指针,且调试时不如switch直观。 状态模式把每个状态封装成对象,转移通过对象切换实现。
部分文件列表
| 文件名 | 大小 |
| 从switch-case到表驱动.docx | 40K |
最新上传
-
sialuoyu 打赏1.00元 1天前
-
21ic小能手 打赏5.00元 3天前
-
21ic小能手 打赏5.00元 3天前
-
他山之石可攻玉 打赏60.00元 3天前
用户:烟雨
-
江岚 打赏310.00元 3天前
用户:潇潇江南
-
21ic下载 打赏310.00元 3天前
用户:江岚
-
21ic下载 打赏310.00元 3天前
用户:潇潇江南
-
21ic下载 打赏210.00元 3天前
用户:zhengdai
-
21ic下载 打赏60.00元 3天前
用户:他山之石可攻玉
-
21ic下载 打赏60.00元 3天前
用户:烟雨
-
21ic下载 打赏110.00元 3天前
用户:w993263495
-
21ic下载 打赏60.00元 3天前
用户:gsy幸运
-
21ic下载 打赏70.00元 3天前
用户:xzxbybd
-
21ic下载 打赏20.00元 3天前
用户:kkfjenui
-
21ic下载 打赏30.00元 3天前
用户:王小琪
-
21ic下载 打赏20.00元 3天前
用户:sun2152
-
21ic下载 打赏20.00元 3天前
用户:w1966891335
-
21ic下载 打赏20.00元 3天前
用户:xuzhen1
-
21ic下载 打赏20.00元 3天前
用户:w178191520
-
21ic下载 打赏20.00元 3天前
用户:zq_1943
-
21ic下载 打赏20.00元 3天前
用户:kk1957135547
-
21ic下载 打赏25.00元 3天前
用户:铁蛋锅
-
21ic下载 打赏20.00元 3天前
用户:liqiang9090
-
21ic下载 打赏20.00元 3天前
用户:x15580286248
-
21ic下载 打赏15.00元 3天前
用户:玉落彼岸
-
21ic下载 打赏5.00元 3天前
用户:hly1230218
-
21ic下载 打赏5.00元 3天前
用户:叮当猫666
-
21ic下载 打赏5.00元 3天前
用户:xjgtgl
-
21ic下载 打赏5.00元 3天前
-
21ic下载 打赏5.00元 3天前
用户:贵平130532
-
21ic下载 打赏5.00元 3天前
用户:linyi3
-
21ic下载 打赏10.00元 3天前
用户:有理想666
-
21ic下载 打赏10.00元 3天前
用户:yahuang001
-
21ic小能手 打赏3.00元 3天前
资料:小米MIX3电路图
-
21ic小能手 打赏10.00元 3天前
-
21ic小能手 打赏5.00元 3天前
-
江岚 打赏100.00元 3天前
用户:潇潇江南
-
他山之石可攻玉 打赏50.00元 3天前
用户:烟雨
-
21ic下载 打赏1.00元 3天前
用户:王小琪
-
yahuang001 打赏3.00元 3天前




全部评论(0)