- 6
- 0
- 约5.81千字
- 约 20页
- 2016-11-27 发布于河南
- 举报
状态机思想
前言 我们的单片机程序分成两类:带操作系统的、前后台的。就我们的采集器来说,前后台系统用得比较多,也就是大家常说的裸奔啦。前后台系统从系统构架上来说,可以分成两类:顺序机、状态机 SysInit(); //系统初始化。 其中,任何一个状态的模型如下: PreStatus1(); //前置状态1。 PreHandler1(); //前置处理1。 PreStatus2(); //前置状态2。 PreHandler2(); //前置处理2。 …… //前置状态3—N。 …… //前置处理3—N。 While (1) While (1) { { Status1(); //状态1。 Handler1(); //处理1。 Status2(); //状态2。 Handler2(); //处理2。 …… //状态3—N。 …… //处理3—N。 } } 顺序机的缺点 顺序机的坏处是后期不好修改,很难实现并发处理 顺序机很难增加在每一个状态中都要执行的动作 程序过程需要等待,系统周期过长 那么我们可以利用顺序机很好解决以上问题 什么是状态机 FSM :Finite State Machine 有限状态机系统,是指在不同阶段会呈现出不同的运行状态的系统,这些状态是有限的、不重叠的。这样的系统在某一时刻一定会处于其 所有状态中的一个状态,此时它接收一部分允许的输入,产生一部分可能的响应,并且迁移到一部分可能的状态。 状态机的要素 State(状态):State(“状态”),就是一个系统在其生命周期中某一时刻的运行情况,此时,系统会执行一些动作,或者等待一些外部输入 Guard(条件):又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移 Event(事件):Event(“事件”),就是在一定的时间和空间上发生的对系统有意义的事情 次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了 Action(动作):当一个Event被状态机系统分发的时候,状态机用Action(“动作”)来进行响应 Transition(迁移):从一个状态切换到另一个状态被称为Transition(“迁移”) 状态迁移图 FSM Designer 状态迁移表 FSM例子 假设我们有一个血氧采集器,它要不停地采集血氧数据,在屏幕上显示出来,并存进Flash 中,然后把它通过蓝牙发送出去。它有两个按键,一个电源键,一个蓝牙键,按电源键开机,按蓝牙键开蓝牙。它有三种状态:关机、清醒、睡眠。关机状态下什么都不干;清醒状态下测量血氧,在屏幕上显示,但是不存储、不发送;睡眠状态下测量血氧,在屏幕上显示,存储、发送血氧数据。关机状态下按电源键进入清醒状态,清醒状态下收到手机发来的开始睡眠命令进入睡眠状态,睡眠状态收到手机发来的结束睡眠命令进入关机状态。 顺序机程序 int main(voi
原创力文档

文档评论(0)