看到有朋友的博客里面在讨论FSM(有限状态机)的内容(http://bbs.ednchina.com/BLOG_ARTICLE_3016729.HTM),对此我也很感兴趣,所以也发一篇凑凑热闹。当然,我这个可能更侧重在嵌入式软件编程方面吧。
这篇博客的主要内容,其实算是整理自网络上的一些文档,主要的思想还是来自附件的PDF文档《用状态机原理进行软件设计》,那篇文档比这篇博客要写得好。
一. FSM的定义:
维基百科版:有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。(http://zh.wikipedia.org/wiki/%E6%9C%89%E9%99%90%E7%8A%B6%E6%80%81%E6%9C%BA)
另一版本,来自附件文档:总的来说,有限状态机系统,是指在不同阶段会呈现出不同的运行状态的系统,这些状态是有限的、不重叠的。这样的系统在某一时刻一定会处于其所有状态中的一个状态,此时它接收一部分允许的输入,产生一部分可能的响应,并且迁移到一部分可能的状态。
二. FSM的要素:
1. State(状态)
State(“状态”),就是一个系统在其生命周期中某一时刻的运行情况,此时,系统会执行一些动作,或者等待一些外部输入。
2. Guard(条件)
状态机对外部消息进行响应的时候,除了需要判断当前的状态,还要判断跟这个状态相关的一些条件是否成立。这种判断称为guard(“条件”)。guard通过允许或者禁止某些操作来影响状态机的行为。
3. Event(事件)
Event(“事件”),就是在一定的时间和空间上发生的对系统有意义的事情。
4. Action(动作)
当一个Event被状态机系统分发的时候,状态机用Action(“动作”)来进行响应,比如修改一下变量的值、进行输入输出、产生另外一个Event或者迁移到另外一个状态等等。
5. Transition(迁移)
从一个状态切换到另一个状态被称为Transition(“迁移”)。引起状态迁移的事件被称为triggering event (“触发事件”),或者被简称为trigger (“触发”)。
//这一节的内容全部剽自附件文档,这些都是专业的定义。文档中用了一个键盘的假想模型来阐述FSM的要素。我把这个模型整理了一下,用中文来表示,用visio重新画了一下。
圆角矩形里面是状态,箭头表示迁移,箭头上标注的是条件、事件或动作,虚线框里面的算是注释了。
用户440448 2013-11-25 14:06