如何深入理解“有限状态机”的设计思想?

本文探讨了有限状态机在程序设计和嵌入式开发中的应用,重点介绍了如何用状态机实现按键消抖功能。通过定义状态、事件和响应,构建状态转换图,展示了使用switch-case法实现的状态机代码。文章通过实际测试,解释了状态机在按键按下和松开过程中的状态变化,帮助读者理解状态机的设计思想。
摘要由CSDN通过智能技术生成

如何深入理解“有限状态机”的设计思想?

程序设计和数字电路设计中都经常会用到“有限状态机”的设计思想。

在嵌入式软件开发中,状态机编程是一个十分重要的编程思想,它也是嵌入式开发中一个常用的编程框架。掌握了状态机编程思想,可以更加逻辑清晰的实现复杂的业务逻辑功能。

1状态机思想

状态机,或称有限状态机FSM(Finite State Machine),是一种重要的编程思想。

状态机有3要素:状态、事件与响应

·状态:系统处在什么状态?

·事件:发生了什么事?

·响应:此状态下发生了这样的事,系统要如何处理?

状态机编程前,首先要根据需要实现的功能,整理出一个对应的状态转换图(状态机图),然后就可以根据这个状态转换图,套用状态机编程模板,实现对应是状态机代码了。

状态机编程主要有 3种方法:switch-case法、表格驱动法、函数指针法,本篇先介绍最简单也最易理解的switch-case法。

2状态机实例

下面以按键消抖功能,来介绍switch-case法的状态机编程思路。

2.1按钮消抖状态转换图

状态机机编程前,首先要明确的对应功能的状态机需要几个状态,本例的按键功能,只检测最基础的按下与松开状态(暂不实现长按、双击等状态),并增加对应的按钮去抖功能,因此,需要用到4个状态:

·稳定松开状态

·按下抖动状态

·稳定按下状态

·松开抖动状态

对应的状态转换图如下:

25191dd9ab509f069e199d7d9f4fb62d.jpeg

由于按键通常处于松开状态,这里让状态机的初始化状态为松开状态,然后在这4个状态中来回切换。

图中的VT代表按键检测到电平,VT=0即检测到低电平,可能是按键按下,由初始的“稳定松开”状态转为“按下抖动”状态

当持续检测到低电平(V

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值