收藏 分享(赏)

状态机思想.ppt

上传人:无敌 文档编号:81737 上传时间:2018-03-10 格式:PPT 页数:20 大小:624.05KB
下载 相关 举报
状态机思想.ppt_第1页
第1页 / 共20页
状态机思想.ppt_第2页
第2页 / 共20页
状态机思想.ppt_第3页
第3页 / 共20页
状态机思想.ppt_第4页
第4页 / 共20页
状态机思想.ppt_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、,论状态机与一些编程问题,主讲人:朱志展,前言,我们的单片机程序分成两类:带操作系统的、前后台的。就我们的采集器来说,前后台系统用得比较多,也就是大家常说的裸奔啦。前后台系统从系统构架上来说,可以分成两类:顺序机、状态机,SysInit(); /系统初始化。 其中,任何一个状态的模型如下:PreStatus1(); /前置状态1。 PreHandler1(); /前置处理1。 PreStatus2(); /前置状态2。 PreHandler2(); /前置处理2。 /前置状态3N。 /前置处理3N。While (1) While (1) Status1(); /状态1。 Handler1();

2、 /处理1。Status2(); /状态2。 Handler2(); /处理2。 /状态3N。 /处理3N。 ,顺序机的缺点,顺序机的坏处是后期不好修改,很难实现并发处理顺序机很难增加在每一个状态中都要执行的动作程序过程需要等待,系统周期过长那么我们可以利用顺序机很好解决以上问题,什么是状态机,FSM :Finite State Machine 有限状态机系统,是指在不同阶段会呈现出不同的运行状态的系统,这些状态是有限的、不重叠的。这样的系统在某一时刻一定会处于其 所有状态中的一个状态,此时它接收一部分允许的输入,产生一部分可能的响应,并且迁移到一部分可能的状态。,状态机的要素,State(状

3、态):State(“状态”),就是一个系统在其生命周期中某一时刻的运行情况,此时,系统会执行一些动作,或者等待一些外部输入Guard(条件):又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移Event(事件):Event(“事件”),就是在一定的时间和空间上发生的对系统有意义的事情次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了Action(动作):当一个Event被状态机系统分发的时候,状态机用Action(“动作”)来进行响应Transition(迁移):从一个状态切换到另一个状态被称为Transition

4、(“迁移”),状态迁移图,FSM Designer,状态迁移表,FSM例子,假设我们有一个血氧采集器,它要不停地采集血氧数据,在屏幕上显示出来,并存进Flash 中,然后把它通过蓝牙发送出去。它有两个按键,一个电源键,一个蓝牙键,按电源键开机,按蓝牙键开蓝牙。它有三种状态:关机、清醒、睡眠。关机状态下什么都不干;清醒状态下测量血氧,在屏幕上显示,但是不存储、不发送;睡眠状态下测量血氧,在屏幕上显示,存储、发送血氧数据。关机状态下按电源键进入清醒状态,清醒状态下收到手机发来的开始睡眠命令进入睡眠状态,睡眠状态收到手机发来的结束睡眠命令进入关机状态。,顺序机程序,int main(void) 关机

5、状态函数: void PowerOffStatus(void)SysInit(); /初始化. while (1) while (1)/循环,直到退出关机状态. KeyHandler();/按键处理.PoweOffStatus(); /关机状态. if (g_bSysMsgEnterWake = WakeStatus(); /清醒状态. BOOL_TRUE) /有进入清醒状态的请求.SleepStatus(); /睡眠状态. g_bSysMsgEnterWake = BOOL_FALE; break; ,状态机程序,int main(void)SysInit(); /初始化.while (1)

6、if (g_bSysMsgTimer10ms = BOOL_TRUE) /10ms 消息.g_bSysMsgTimer10ms = BOOL_FALSE;SysOnTimer10ms();if (g_bSysMsgTimer100ms = BOOL_TRUE) /100ms 消息.g_bSysMsgTimer100ms = BOOL_FALSE;SysOnTimer100ms();if (g_bSysMsgTimer1s = BOOL_TRUE) /1s 消息.,状态机程序,g_bSysMsgTimer1s = BOOL_FALSE;SysOnTimer1s();if (g_bSysMsgKe

7、yPressed = BOOL_TRUE) /键按下.g_bSysMsgKeyPressed = BOOL_FALSE;SysOnKeyPressed(g_uSysMsgKeyPressedCode);if (g_bSysMsgKeyFliped = BOOL_TRUE) /键松开.g_bSysMsgKeyFliped = BOOL_FALSE;SysOnKeyFliped(g_uSysMsgKeyFlipedCode, g_uSysMsgKeyFlipedTime);if (g_bSysMsgKeyPressing = BOOL_TRUE) /键按住.g_bSysMsgKeyPressing

8、 = BOOL_FALSE;,状态机程序,SysOnKeyPressing(g_uSysMsgKeyPressingCode, g_uSysMsgKeyPressingTime);EMU_EnterEM1(); /进入低功耗.等待中断将其唤醒.void SysOnTimer10ms(void)KeyOnTimer10ms(); /键盘模块.OxygenOnTimer10ms(); /血氧模块.BlueToothOnTimer10ms(); /蓝牙.TransOnTimer10ms(); /传输层.BusiOnTimer10ms(); /业务层.TelephoneOnTimer10ms(); /

9、手机.SleepOnTimer10ms(); /睡眠系统.负责系统总筹.SleepDetcetOnTimer10ms(); /睡眠检测.SleepStoreOnTiemr10ms(); /睡眠存储.SleepSendOnTimer10ms(); /睡眠发送.,FSM实现方法,nestted switch statement(嵌套switch)分析:这个是最简单、最常用的FSM 实现方法。通过嵌套的2 层switch case实现。外层switch case 判断状态,内层switch case 判断消息。状态采用枚举量优点:结构简单,便于理解。缺点:代码冗长。结论:这种代码结构感觉比较冗长,不

10、建议在复杂的状态机中使用。,FSM实现方法,state table(状态表)分析:这种FSM 实现方法对nestted switch statement 进行了改良。根据state、event 做成了2 维表格,表格中的项就表示action 和transition。状态采用枚举量。优点:结构简单,便于理解。代码比较简练。效率最高。缺点:代码结构不是太好。结论:这是一种常用的实现方法。如果没有更好的选择,可以使用。,FSM实现方法,Function Address As State(用函数指针作为状态)分析:这种FSM 实现方法用函数地址代替state 值优点:代码框架好,比较直观。结论:效率较

11、高(比nestted switch statement 高,比state table 效率低)代码框架好,FSM实现方法,QFSM frame(QFSM 框架)分析:QFSM 实现方法对第三种方法(Function Address As State 方法)做了进一步改良,并且把fsm 的framework 作为公共的函数库提出来,包括qfsm.h 和qfsm.c 等其他辅助文件优点:代码非常整齐、直观。可以方便的FSM UML 图转化成code。可以方便的增加entry/exit 操作结论:效率较高,代码整齐,使用方便,强烈推荐使用,FSM注意的一些问题,在状态机当中,大部分事情都是周期性的定

12、时处理,我们把最小的系统周期称之为系统节拍。由状态机的特性我们知道,系统的响应周期不能超过它的查询周期,否则系统会丢失对某些输入的处理。而系统的响应周期是各个模块的执行时间之和,所以要求各个模块的单次执行时间要远小于查询周期(十分之一以下)。在实际编程中,我们很难做到响应周期一定小于查询周期,而是大部分时候实际执行时间小于查询周期。允许有极端情况会导致偶尔的实际执行时间超过查询周期。当发生实际执行时间超过查询周期的时候,我们就要做一些特殊处理了,FSM注意的一些问题,漫长而缓慢的功能1) 由若干个等待组成的功能。我们可以在等待的地方将它分成若干步,然后分步执行2) 由许多关联性不强的琐碎操作组成的功能。我们可以在关联性不强的地方将它分成若干步,然后分步执行3) 很少等待,前后关联性也很强的功能。对于这类功能,我们没办法将它分片3a)这个功能是个关键功能,系统允许这个功能在执行期间让它独占控制权。我们就让它独自执行,忽略这期间的其它输入3b)系统不允许这个功能在执行期间独占控制权。这种情况绝对是硬件架构设计不好,应该专门用一个CPU 实现这个功能概括一下,对待漫长而缓慢的功能,使用switch 将它剪碎,谢谢,谢谢观赏,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报