FSM(有限状态机)

文章介绍了有限状态机(FSM)的概念及其组成部分,如状态、状态转移、转移条件和动作,并通过实例展示了FSM如何优化AVR单片机中的ADC转换过程,解决了程序因等待转换而卡顿的问题。通过设立状态并在每个状态执行相应动作,实现了程序流程的平滑和效率提升。
摘要由CSDN通过智能技术生成

1.什么是状态机

有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。
将一个事件分成多个完整的状态,每个状态通过输入和输出进入下一个状态,这就是状态机思维。

优点:FSM可以把模型的多状态、多状态间的转换条件解耦,降低程序耦合度,使程序维护变得容易,代码也更具有可读性。

状态机中有几个术语:state(状态) 、transition(状态转移) 、action(动作) 、transition condition(转移条件)

2.状态

  将一件事拆分为多件事,为每一件事赋予一个名字,这个名字就被称为FSM中的状态。因其状态有限,所以FSM被称为有限状态机。

例如:
   风扇可划分为关、一档、二挡、三挡等状态。
   电梯门可划分为关闭、正在开启、开启、正在关闭。

3.状态转移

  当一个状态执行了某些动作转别为另外一个状态的过程就是一个状态转移。
状态转移就是在定义状态机的转移流程。

4.转移条件

  指在某个状态下,达到了某个转移条件,才会按照状态机的转移流程转移到下一状态,并执行相应的动作。

5.动作

  当转变为一个新状态时,在这个状态下需要做的事情,称为动作

6.FSM

大概解释图:

话不多说上代码!!!

首先创建状态,使用枚举为某个任务/某件事设立多个状态
在这里插入图片描述
设立转移条件,满足条件后,进行状态转移
这里是当检测到触摸时,将Touch_mode转变为对应的触摸状态。
如果未检测到触摸,则将状态归位。
在这里插入图片描述
  在状态转移后,我们在mian中去处理每个状态对应的动作。
  在主程序while中用Switch来判断当前状态,程序每运行一轮,就会进来看当前状态,并运行当前状态所需要做的动作。
  可在动作中改变另一个状态机的状态,以此进行一些更复杂的操作。
  也可以改变自身状态,以便进行衔接。
在这里插入图片描述

7.所遇问题(实际应用)

在使用AVR单片机时,MCC(代码配置器)生成的ADC转换函数。
问题点:在使用该函数时,程序会因等待ADC转换而造成卡顿,从而导致突发性的程序跑死。
在这里插入图片描述
在这里插入图片描述
解决方案:引用FSM状态机,将函数拆分为几个状态。

引用FSM前:

引用FSM前,程序运行流程图

                图为:引用FSM前,程序运行流程

引用FSM后:

引用FSM后,程序运行流程图
                    图为:引用FSM后,程序运行流程

如何实现的呢?

首先设立状态
在这里插入图片描述
       当需要ADC转换时,将状态切换至ADC_start,之后便开始转换,每完成一步则切换下一步的状态,在等待转换完成时,程序并不会等待,而是会直接跳出,等下一轮时再来看是否完成,直到完成为止。
       使程序更加顺滑,节约程序运行时间。
在这里插入图片描述

有限状态机FSM)是一个数学模型,用于描述具有有限数量状态的系统的行为。FSM有三个主要组成部分:状态集合、输入集合和状态转换函数。 首先,有限状态机由一组离散的状态组成。状态是系统在特定时间点的情况的表示,可以是一个特定的变量或属性。例如,一个交通信号灯可以有三种状态:红灯、黄灯和绿灯。 其次,有限状态机还包括输入集合,可以触发状态之间的转换。输入可以是外部条件,例如一个按钮的按下、一个传感器的数据或一个特定的事件。例如,在交通信号灯的情况下,按下按钮可能是一个输入,将状态从红灯转换到绿灯。 最后,有限状态机还包括状态转换函数,它指示在给定状态和输入情况下系统应该如何转换到下一个状态。转换可以是确定性的,也可以是非确定性的。在交通信号灯的情况下,状态转换函数可以定义为:当状态是红灯时,如果接收到按钮按下的输入,则将状态转换为绿灯。 通过将这三个组成部分结合起来,我们可以使用有限状态机来描述和计算系统的行为。FSM广泛应用于计算机科学和工程领域,用于模型验证、软件开发、自动控制等领域。 总之,有限状态机是一种简单但强大的数学模型,用于描述具有有限数量状态的系统的行为。它通过状态集合、输入集合和状态转换函数来建模系统,用于解决各种计算和控制问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值