状态机之c解析

状态机之c解析

ID:35394152

大小:76.46 KB

页数:5页

时间:2019-03-24

状态机之c解析_第1页
状态机之c解析_第2页
状态机之c解析_第3页
状态机之c解析_第4页
状态机之c解析_第5页
资源描述:

《状态机之c解析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、状态机之C++解析2008-11-18作者:CppExplore來源:cppblog.com一、状态机描述状态机理论最初的发展在数字电路设计领域。在数字电路方面,根据输岀是否与输入信号有关,状态机可以划分为Mealy型和Room型状态机:根据输出是否与输入信号同步,状态机可以划分为异步和同步状态机。而在软件设计领域,状态机设计的理论俨然己经自成一体。Moore型状态机的输出只和当前状态冇关,和输入无关,如果在软件设计领域设计出这种类型的状态机,则该状态机接受的事件都是无内蕴信息的事件(输入)。Mealy型状态机的输入是由当前状态和输入共同决定,对应到软件设计领域

2、,则该状态机接收的事件含冇内蕴信息,并且影响状态机的输出。显然,这种划分在软件设计领域毫无意义。虽然软件设计领域的状态机也有同步和异步的划分,但和数字电路方而的同步片步已经不同。除了《数字电路》,涉及到状态机的课程就是《编译原理》T(本人属计算机专业,英它专业是否涉及到状态机就不清楚了)。下而简单回顾-下《编译原理》里有关有限状态机的描述。在编译原理课程里面,对有限状态机的描述仅限在编译领域,特定状态,针对输入字符,发生状态改变,没有额外的行为,另编译原理里有限状态机的构成要索,还包含唯一的初始状态和一个终态集。数学语言描述如下:一个有限状态机M是一个五元组,0

3、(K,E,T,S,Z)。其屮(1)K是一个有穷集,其中的每个元索称为状态(2)E是一个有穷字母表,它的每个元素称为一个输入字符(3)T是转换函数,是KXE->K±的映射(4)S是K中的元素,是唯一的一个初态(5)Z是K的一个子集,是一个终态集,或者叫结束集。很明显,状态机在编译原理里的讲解已经特化,输入被定位为字符集,状态改变的时候没有额外动作发生。与编译原理中的状态机不同,软件设计领域中通用状态机的输入不是字符集,而是被称作事件的结构(可以是结构体,也可以是类对象〉,并且特定的状态下,针对发生的事件,不仅发生状态改变,而且产生动作。借鉴编译原理中状态机的初始状

4、态和终态,通用状态机的数学语言描述如下:一个通用有限状态机H是一个七元组,M二{K,E,T,M,F,S,Z}。其中(1)K是一个有穷集,其中的毎个元素称为状态(2)E是一个有穷集,它的毎个元素称为一个爭件(3)T是转换函数,是KXE->K±的映射(4)M是一个有穷集,它的每个元素称为动作(5)E是动作映射函数,是KXE->M±的映射(6)S是K中的元素,是唯一的一个初态(7)Z是K的一个子集,是一个终态集,或者叫结束集。实用的状态机可以做进一步的优化,首先,可以把(3)(5)幣合在-•起,做一个KXE->{K,M)的映射,其次从实用性的角度出发,禁止状态接收空事

5、件(无输入的情况F,状态发生改变),作为弥补,为每个状态增加进入动作利离开动作,第三,鉴于定时器在系统中,尤其是在状态机中的重要性,可以为每个状态增加定时器以及超时后的状态转换。木文后面的讲述以及实现暂不考虑把定时器特化,如果需耍,可以在状态的进入动作中初始化定时器(另:关于定时器,以后会写文章《系统设计之定时器》)。二、状态机分类(后文中如无特别说明,则状态机指软件设计领域的通用有限状态机)依据状态之间是否有包含关系,分以下两种(1)常规状态机。状态机中的所有状态是不和交的、互斥的。(2)层次状态机。状态机中的状态Z间要么是互斥的,要么是真包含的,可以用树性结

6、构來描述这些状态集,包含其它状态的状态称为枝节点,不包含其它状态的状态称为叶节点,为方便单•树描述,总是设计一个状态包含所有的状态节点,称为根节点。状态机的状态只能停留在叶节点,而不能停留在枝节点,毎个枝节点需要指定一个子节点为它的默认子节点,以便状态机进入枝节点的时候能够停留到叶节点。三、状态机实现(1)switch/caseif/else方式实现。用丁少量状态(3个及其以F)的时候,不需耍引入专门的状态机模块。这种方式不能编写通用的状态机模块,不再多说。(2)面向过程方式:宏是实现面向过程方式的通用方式。虽然在状态机层ifii还是町以用ifii向对象的方式封

7、装,这里还是把它称为ifii向过程的方式。1.常规状态机模块实现。这个状态机涉及到机构由上而下为:•顶层结构是状态机:当前状态id,缺省操作,状态表,•状态表:状态数组•状态结构:状态id,状态名,进入操作,退出操作,缺省操作,状态事件表(数纽)•状态事件结构:操作,事件,下--状态的id状态机的算法是由状态机的结构决定的。实现如2^defineSINGLE_STATE_MAX_EVENT10typedefintFSMEVENTID;typedefstructeventparamstFSMEVENTIDid;union(inti;}data;L}FSMEVENT

8、;typedefintF

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。