一种状态机管理方法及系统的制作方法
【技术领域】
[0001] 本发明设及一种计算机技术,特别是设及一种状态机管理方法及系统。
【背景技术】
[0002] 有限状态机又称有限状态自动机,简称状态机,是表示有限个状态W及在该些状 态之间的转移和动作等行为的数学模型,状态存储关于过去的信息,就是说;它反映从系统 开始到现在时刻的输入变化。转移指示状态变更,并且用必须满足来确使转移发生的条件 来描述它,动作是在给定时刻要进行的活动的描述。有多种类型的动作。在嵌入式系统中, 通常要求系统实现短小精炼,现有的对于状态机实现的解决方案采用switch/case或者 if/else,该无意是最直观的方式,使用一堆条件判断,会编程的人都可W做到,对简单小巧 的状态机来说最合适,但是毫无疑问,该样的方式比较原始,当状态机中的状态和转移数量 比较大时,系统中的状态机将变得难W维护。
[0003] 鉴于此,如何找到一种高效简洁的状态机管理方法及系统成为了本领域技术人员 亟待解决的问题。
【发明内容】
[0004] 鉴于W上所述现有技术的缺点,本发明的目的在于提供一种状态机管理方法及系 统,用于解决现有技术中状态机管理上存在的问题。
[0005] 为实现上述目的及其他相关目的,本发明提供一种状态机管理方法,所述状态机 管理方法包括;根据状态机中的状态设置状态数组,每个状态对应状态数组中的一个状态 数组元素,所述状态数组的字段包括:状态动作、转移数量W及转移事件数组,所述转移事 件数组包括所述转移数量个元素;所述转移事件数组的字段包括:转移事件W及转移状 态;预设状态机的当前状态;状态检测时,依次检测当前状态所对应的状态数组元素中的 每一个所述转移事件数组元素;当所述转移事件元素的转移事件为真时,设置当前状态为 所述转移事件元素的转移状态,中断所述状态检测。
[0006] 可选地,所述状态检测包括定时状态检测。
[0007] 可选地,所述状态机管理方法还包括;当状态机的状态发生改变时,相应的更改所 述状态数组中对应的状态数组元素,所述更改包括对所述状态数组元素的删除、增加、修改 中的任一种。
[000引可选地,对所述状态数组元素的修改包括对所述状态数组元素的转移事件数组元 素的删除、增加、修改中的任一种,当对所述状态数组元素的转移事件数组元素的删除或者 增加时,相应的修改所述状态数组元素的转移数量。
[0009] 可选地,所述状态机管理方法还包括;执行当前状态所对应的状态数组元素中的 状态动作。
[0010] 可选地,所述状态机管理方法还包括;当所述转移事件元素的转移事件为真时,设 置当前状态为所述转移事件元素的转移状态,同时设置当前状态修改标志为真,当所述当 前状态修改标志为真时,执行当前状态所对应的状态数组元素中的状态动作。
[0011] 本发明还提供一种状态机管理系统,所述状态机管理系统包括:状态机初始模块, 用于初始化状态机,包括;根据状态机中的状态设置状态数组,每个状态对应状态数组中的 一个状态数组元素,所述状态数组的字段包括:状态动作、转移数量W及转移事件数组,所 述转移事件数组包括所述转移数量个元素;所述转移事件数组的字段包括:转移事件W及 转移状态;预设状态机的当前状态;状态机管理模块,用于进行状态检测,所述状态检测包 括:依次检测当前状态所对应的状态数组元素中的每一个所述转移事件数组元素;当所述 转移事件元素的转移事件为真时,设置当前状态为所述转移事件元素的转移状态,中断所 述状态检测。
[0012] 可选地,所述状态检测包括定时状态检测。
[0013] 可选地,所述状态机管理系统还包括状态信息修改模块:用于当状态机的状态发 生改变时,相应的更改所述状态数组中对应的状态数组元素,所述更改包括对所述状态数 组元素的删除、增加、修改中的任一种。
[0014] 可选地,对所述状态数组元素的修改包括对所述状态数组元素的转移事件数组元 素的删除、增加、修改中的任一种,当对所述状态数组元素的转移事件数组元素的删除或者 增加时,相应的修改所述状态数组元素的转移数量。
[0015] 可选地,状态机管理模块还用于执行当前状态所对应的状态数组元素中的状态动 作。
[0016] 可选地,状态机管理模块还用于;当所述转移事件元素的转移事件为真时,设置当 前状态为所述转移事件元素的转移状态,同时设置当前状态修改标志为真,当所述当前状 态修改标志为真时,执行当前状态所对应的状态数组元素中的状态动作。
[0017] 如上所述,本发明的一种状态机管理方法及系统,具有W下有益效果;改进现有的 技术中的缺点,提高状态机管理的效率,同时能让开发者更加灵活的根据需要对状态进行 修改,具有很高的健壮性。该技术方案尤其适用于嵌入式设备的开发中。
【附图说明】
[0018] 图1显示为本发明的状态机管理方法的一实施例的流程示意图。
[0019] 图2显示为本发明的状态机管理方法的一实施例的流程示意图。
[0020] 图3显示为本发明的状态机管理系统的一实施例的模块示意图。
[0021] 图4显示为本发明的状态机管理系统的一实施例的模块示意图。
[0022] 元件标号说明
[0023] 1 状态机管理系统
[0024] 11 状态机初始模块
[0025] 12 状态机管理模块
[0026] 13 状态信息修改模块
[0027] S1 ~S3 步骤
【具体实施方式】
[002引 W下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书 所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可w通过另外不同的具体实 施方式加W实施或应用,本说明书中的各项细节也可W基于不同观点与应用,在没有背离 本发明的精神下进行各种修饰或改变。
[0029] 需要说明的是,本实施例中所提供的图示仅W示意方式说明本发明的基本构想, 遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘 审IJ,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可 能更为复杂。
[0030] 本发明提供一种状态机管理方法。该状态机管理方法特别适用于嵌入式设备中。 在一个实施例中,如图1所示,所述状态机管理方法包括:
[0031] 步骤S1,根据状态机中的状态设置状态数组,每个状态对应状态数组中的一个状 态数组元素,所述状态数组的字段包括:状态动作、转移数量W及转移事件数组,所述转移 事件数组包括所述转移数量个元素;所述转移事件数组的字段包括:转移事件W及转移状 态;预设状态机的当前状态。
[0032] 在一个实施例中,所述状态数组的字段结构的伪代码如下:
[0033]
[0035] 其中,embeddedFsmeTransition为转移事件结构,其具体的字段结构的伪代码如 下:
[0036]
[0037] 在状态机初始化时,根据状态机中包括的状态设置状态数组元素,根据每一个状 态分别设置相应的状态数组元素的字段值。同时,设置初始状态,即最初的状态机的当前状 态。
[003引步骤S2,状态检测时,依次检测当前状态所对应的状态数组元素中的每一个所述 转移事件数组元素;当所述转移事件元素的转移事件为真(true)时,设置当前状态为所述 转移事件元素的转移状态,中断所述状态检测。在一个实施例中,所述状态检测包括定时状 态检测或者依照某种预设条件触发状态检测。
[0039] 在一个实施例中,采用一个结构体来对状态进行管理,该个结构体用于描述运行 在的状态机里面的一个状态实例,它包含描述该个状态机是否运行的标志,描述有限状态 机的状态改变的标志,该个有限状态机的状态的数量W及状态数组(一个状态对应着一个 状态数组元素,共有状态的数量个有效状态数组元素),w及当前状态对应的转移数量和转 移事件数组。其具体的结构体的伪代码如下所示:
[0040]
[0041] 一个有限状态机是由一套embeddedFsmeTransition表(数组)它包含从每一个 状态的转移的信息,和embeddedFsmeState表(数组)它包含有限状态机的所有状态W及 每一个状态对应的转移数据的索引。W及embeddedFsmelnstance全局变量,该个变量用于 包含所有的数据W及所有的索引,有限状态的核屯、函数就是用该个全局变量来运行的。核 屯、函数用于有限状态机的状态的更新。核屯、函数的伪代码描述如下:
[0042]
[0043]
[0044] 该个伪代码函数主要是轮询当前状态对应的转移表(数组)和检查转移事件的发 生,如果事件触发,该个有限状态机的的状态就根据状态表(数组)来更新,一旦事件触发, 该个函数功能就结束。
[0045] 有限状态机的主要运行函数如下:
[0046]
[0047] 在一个实施例中,如图2所示,所述状态机管理方法还包括:
[0048] 步骤S3,执行当前状态所对应的状态数组元素中的状态动作。在一个实施例中,所 述状态机管理方法还包括;当所述转移事件元素的转移事件为真时,设置当前状态为所述 转移事件元素的
转移状态,同时设置当前状态修改标志为真,当所述当前状态修改标志为 真时,执行当前状态所对应的状态数组元素中的状态动作。
[0049] 在一个实施例中,所述状态机管理方法还包括;当状态机的状态发生改变时,相应 的更改所述状态数组中对应的状态数组元素,所述更改包括对所述状态数组元素的删除、 增加、修改中的任一种。对所述状态数组元素的修改包括对所述状态数组元素的转移事件 数组元素的删除、增加、修改中的任一种,当对所述状态数组元素的转移事件数组元素的删 除或者增加时,相应的修改所述状态数组元素的转移数量。
[0化0] 本发明还提供一种状态机管理系统,所述状态机管理系统可W采用如上所述的状 态机管理方法。在一个实施例中,如图3所示,所述状态机管理系统1包括状态机初始模块 11W及状态机管理模块12。其中:
[0化1] 状态机初始模块11用于初始化状态机,包括:根据状态机中的状态设置状态数 组,每个状态对应状态数组中的一个状态数组元素,所述状态数组的字段包括:状态动作、 转移数量W及转移事件数组,所述转移事件数组包括所述转移数量个元素;所述转移事件 数组的字段包括:转移事件W及转移状态;预设状态机的当前状态。
[0化2] 在一个实施例中,所述状态数组的字段结构的伪代码如下:
[0化3]
[0054] 其中,embeddedFsmeTransition为转移事件结构,其具体的字段结构的伪代码如 下:
[0 化 5]
[0056] 在状态机初始模块11中,根据状态机中包括的状态设置状态数组元素,根据每一 个状态分别设置相应的状态数组元素的字段值。同时,设置初始状态,即最初的状态机的当 前状态。
[0057] 状态机管理模块12与状态机初始模块11相连,用于进行状态检测,所述状态检测 包括;依次检测当前状态所对应的状态数组元素中的每一个所述转移事件数组元素:当所 述转移事件元素的转移事件为真时,设置当前状态为所述转移事件元素的转移状态,中断 所述状态检测。所述状态检测包括定时状态检测或者依照某种预设条件触发状态检测。 [0化引在一个实施例中,状态机管理模块12采用一个结构体来对状态进行管理,该个结 构体用于描述运行在的状态机里面的一个状态实例,它包含描述该个状态机是否运行的标 志,描述有限状态机的状态改变的标志,该个有限状态机的状态的数量w及状态数组(一 个状态对应着一个状态数组元素,共有状态的数量个有效状态数组元素),W及当前状态对 应的转移数量和转移事件数组。其具体的结构体的伪代码如下所示:
[0059]
[0060] 一个有限状态机是由一套embeddedFsmeTransition表(数组)它包含从每一个 状态的转移的信息,和embeddedFsmeState表(数组)它包含有限状态机的所有状态W及 每一个状态对应的转移数据的索引。W及embeddedFsmelnstance全局变量,该个变量用于 包含所有的数据W及所有的索引,有限状态的核屯、函数就是用该个全局变量来运行的。核 屯、函数用于有限状态机的状态的更新。核屯、函数的伪代码描述如下:
[0061]
[0062]
[0063] 该个伪代码函数主要是轮询当前状态对应的转移表(数组)和检查转移事件的发 生,如果事件触发,该个有限状态机的的状态就根据状态表(数组)来更新,一旦事件触发, 该个函数功能就结束。
[0064] 状态机管理模块12还用于执行当前状态所对应的状态数组元素中的状态动作。 状态机管理模块12的主要运行函数的伪代码描述如下:
[00化]
[0066] 在一个实施例中,状态机管理模块12还用于;当所述转移事件元素的转移事件为 真时,设置当前状态为所述转移事件元素的转移状态,同时设置当前状态修改标志为真,当 所述当前状态修改标志为真时,执行当前状态所对应的状态数组元素中的状态动作。
[0067] 在一个实施例中,如图4所示,所述状态机管理系统1还包括状态信息修改模块 13,状态信息修改模块13与所述状态机管理模块12相连,用于当状态机的状态发生改变 时,相应的更改所述状态数组中对应的状态数组元素,所述更改包括对所述状态数组元素 的删除、增加、修改中的任一种。具体地,对所述状态数组元素的修改还包括对所述状态数 组元素的转移事件数组元素的删除、增加、修改中的任一种,当对所述状态数组元素的转移 事件数组元素的删除或者增加时,相应的修改所述状态数组元素的转移数量。
[0068] 综上所述,本发明的一种状态机管理方法及系统能够改进现有的技术中的缺点, 提高状态机管理的效率,同时能让开发者更加灵活的根据需要对状态进行修改,具有很高 的健壮性。该技术方案尤其适用于嵌入式设备的开发中。所W,本发明有效克服了现有技 术中的种种缺点而具高度产业利用价值。
[0069] 上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟 悉此技术的人±皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因 此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完 成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
【主权项】
1. 一种状态机管理方法,其特征在于,所述状态机管理方法包括: 根据状态机中的状态设置状态数组,每个状态对应状态数组中的一个状态数组元素, 所述状态数组的字段包括:状态动作、转移数量以及转移事件数组,所述转移事件数组包括 所述转移数量个元素;所述转移事件数组的字段包括:转移事件以及转移状态;预设状态 机的当前状态; 状态检测时,依次检测当前状态所对应的状态数组元素中的每一个所述转移事件数组 元素:当所述转移事件元素的转移事件为真时,设置当前状态为所述转移事件元素的转移 状态,中断所述状态检测。2. 根据权利要求1所述的状态机管理方法,其特征在于:所述状态机管理方法还包括: 当状态机的状态发生改变时,相应的更改所述状态数组中对应的状态数组元素,所述更改 包括对所述状态数组元素的删除、增加、修改中的任一种。3. 根据权利要求2所述的状态机管理方法,其特征在于:对所述状态数组元素的修改 包括对所述状态数组元素的转移事件数组元素的删除、增加、修改中的任一种,当对所述状 态数组元素的转移事件数组元素的删除或者增加时,相应的修改所述状态数组元素的转移 数量。4. 根据权利要求1所述的状态机管理方法,其特征在于:所述状态机管理方法还包括: 执行当前状态所对应的状态数组元素中的状态动作。5. 根据权利要求1所述的状态机管理方法,其特征在于:所述状态机管理方法还包括: 当所述转移事件元素的转移事件为真时,设置当前状态为所述转移事件元素的转移状态, 同时设置当前状态修改标志为真,当所述当前状态修改标志为真时,执行当前状态所对应 的状态数组元素中的状态动作。6. -种状态机管理系统,其特征在于:所述状态机管理系统包括:状态机初始模块,用 于初始化状态机,包括:根据状态机中的状态设置状态数组,每个状态对应状态数组中的 一个状态数组元素,所述状态数组的字段包括:状态动作、转移数量以及转移事件数组,所 述转移事件数组包括所述转移数量个元素;所述转移事件数组的字段包括:转移事件以及 转移状态;预设状态机的当前状态;状态机管理模块,用于进行状态检测,所述状态检测包 括:依次检测当前状态所对应的状态数组元素中的每一个所述转移事件数组元素:当所述 转移事件元素的转移事件为真时,设置当前状态为所述转移事件元素的转移状态,中断所 述状态检测。7. 根据权利要求6所述的状态机管理系统,其特征在于:所述状态机管理系统还包括 状态信息修改模块:用于当状态机的状态发生改变时,相应的更改所述状态数组中对应的 状态数组元素,所述更改包括对所述状态数组元素的删除、增加、修改中的任一种。8. 根据权利要求7所述的状态机管理系统,其特征在于:对所述状态数组元素的修改 包括对所述状态数组元素的转移事件数组元素的删除、增加、修改中的任一种,当对所述状 态数组元素的转移事件数组元素的删除或者增加时,相应的修改所述状态数组元素的转移 数量。9. 根据权利要求6所述的状态机管理系统,其特征在于:状态机管理模块还用于执行 当前状态所对应的状态数组元素中的状态动作。10. 根据权利要求6所述的状态机管理系统,其特征在于:状态机管理模块还用于:当
【专利摘要】本发明提供一种状态机管理方法及系统。所述状态机管理方法包括:根据状态机中的状态设置状态数组,每个状态对应状态数组中的一个状态数组元素,所述状态数组的字段包括:状态动作、转移数量以及转移事件数组,所述转移事件数组包括所述转移数量个元素;所述转移事件数组的字段包括:转移事件以及转移状态;预设状态机的当前状态;状态检测时,依次检测当前状态所对应的状态数组元素中的每一个所述转移事件数组元素:当所述转移事件元素的转移事件为真时,设置当前状态为所述转移事件元素的转移状态,中断所述状态检测。本发明的技术方案能够改进现有的技术中的缺点,提高状态机管理的效率,同时具有很高的健壮性。
【IPC分类】G06F9/44
【公开号】CN104881297
【申请号】CN201510349400
【发明人】庞骏
【申请人】上海斐讯数据通信技术有限公司
【公开日】2015年9月2日
【申请日】2015年6月19日
转载请注明原文地址:https://www.famiwei.com/read-8138778.html