一种软件实现状态机的方法及装置制造方法及图纸

技术编号:17247959 阅读:59 留言:0更新日期:2018-02-11 06:00
本发明专利技术公开了一种软件实现状态机的方法及装置,该方法包括:对状态机的处理流程进行分析,确定所述处理流程所需要的状态的个数;对于所述处理流程所需要的每个状态,建立每个状态下的触发条件以及在该触发条件下的下一个对应的状态;对于所述处理流程所需要的每个状态,建立每个状态的处理函数;将状态、处理函数、触发条件,触发条件所对应的下一个状态都封装到一个结构中;所述结构为状态机的结构。该方法实现降低流程复杂性。

【技术实现步骤摘要】
一种软件实现状态机的方法及装置
本专利技术涉及状态机
,特别是涉及一种软件实现状态机的方法及装置。
技术介绍
目前,软件编程过程中,为了实现一些有序的功能操作,往往离不开状态机的使用。状态机是软件编程中的一个重要概念。在一个思路清晰且高效的程序中,必然有状态机的身影。例如一个接收数据包的处理过程,首先要接收包头,校验包头,分析包头,其次接收包的数据部分,校验包的数据部分,接着接收包尾,校验整个数据部分,接着处理数据包,递送数据包。这一系列过程中会遇到一些不同的情况,包头正确或者包头错误的情况,数据部分正确或错误的情况,因为数据包可能不是一种类型的格式,递送数据包递送给哪个处理函数。这些根据不同情况,跳转到不同状态去执行,基本都是用状态机来实现。现有技术中,首先,定义处理一个相应流程需要哪些状态,把这些状态通过枚举结构罗列出来,例如有4个状态state_A,state_B,state_C,state_D。state_A是起始状态。其次,做一个循环函数,循环函数里包含一个switch,switch用来选择进入哪个状态。有触发动作后,进入状态机当前状态的处理函数,根据执行处理函数的结果决定下一步进入哪个状态。例如起始状态是state_A,经过判断下一步进入state_C。再次,有触发动作的时候,在下一个状态(state_C)的执行函数处理完成后根据处理结果决定下一步进入哪个状态。如果state_C处理函数执行完成确定这个状态机流程结束,那么重新进入新一轮的起始状态进入state_A。参考图1,图1为现有技术中状态机基本的处理流程图。现有技术缺点:处理一个操作流程,如果这个操作流程比较简单,只要几个状态就可以处理完成,思路清晰,那上述方法也能使人看懂,出了问题调试也比较容易。假如要处理的流程复杂一些,需要几十个状态才能完成,那么用上述方法会让流程复杂性太高,理解这个流程和调试都很困难。
技术实现思路
本专利技术的目的是提供一种软件实现状态机的方法及装置,以实现降低流程复杂性。为解决上述技术问题,本专利技术提供了如下技术方案:一种软件实现状态机的方法,包括:对状态机的处理流程进行分析,确定所述处理流程所需要的状态的个数;对于所述处理流程所需要的每个状态,建立每个状态下的触发条件以及在该触发条件下的下一个对应的状态;对于所述处理流程所需要的每个状态,建立每个状态的处理函数;将状态、处理函数、触发条件,触发条件所对应的下一个状态都封装到一个结构中;所述结构为状态机的结构。优选地,处理函数用于递送触发条件给状态机。优选地,还包括:在封装的结构中添加循环函数,由循环函数轮询处理状态机。优选地,所述循环函数用于接收触发状态的信号量,进入到信号量对应的状态,判断触发事件所指向的下一个状态,更新到下一个状态,并执行下一个状态的处理函数。一种软件实现状态机的装置,用于实现如上述任意一项所述的方法,包括:分析模块,用于对状态机的处理流程进行分析,确定所述处理流程所需要的状态的个数;触发建立模块,用于对于所述处理流程所需要的每个状态,建立每个状态下的触发条件以及在该触发条件下的下一个对应的状态;函数建立模块,用于对于所述处理流程所需要的每个状态,建立每个状态的处理函数;封装模块,用于将状态、处理函数、触发条件,触发条件所对应的下一个状态都封装到一个结构中;所述结构为状态机的结构。优选地,处理函数用于递送触发条件给状态机。优选地,还包括:添加模块,用于在封装的结构中添加循环函数,由循环函数轮询处理状态机。优选地,所述循环函数用于接收触发状态的信号量,进入到信号量对应的状态,判断触发事件所指向的下一个状态,更新到下一个状态,并执行下一个状态的处理函数。与现有技术相比,上述技术方案具有以下优点:本专利技术所提供的一种软件实现状态机的方法及装置,对状态机的处理流程进行分析,确定所述处理流程所需要的状态的个数;对于所述处理流程所需要的每个状态,建立每个状态下的触发条件以及在该触发条件下的下一个对应的状态;对于所述处理流程所需要的每个状态,建立每个状态的处理函数;将状态、处理函数、触发条件,触发条件所对应的下一个状态都封装到一个结构中;所述结构为状态机的结构。可见,明确了状态机某个触发条件下固定的下一状态是什么,不是走到一个状态再判断下一个状态是什么,增加触发条件和下一状态的机制,降低流程复杂性,更容易理解和调试,使理解流程和调试都能更加便捷。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。图1为现有技术中状态机基本的处理流程图;图2为本专利技术所提供的一种软件实现状态机的方法的流程图;图3为本专利技术所提供的一种软件实现状态机的装置的结构示意图。具体实施方式本专利技术的核心是提供一种软件实现状态机的方法及装置,以实现降低流程复杂性。为了使本
的人员更好地理解本专利技术方案,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。请参考图2,图2为本专利技术所提供的一种软件实现状态机的方法的流程图,该方法包括:S11:对状态机的处理流程进行分析,确定所述处理流程所需要的状态的个数;S12:对于所述处理流程所需要的每个状态,建立每个状态下的触发条件以及在该触发条件下的下一个对应的状态;S13:对于所述处理流程所需要的每个状态,建立每个状态的处理函数;S14:将状态、处理函数、触发条件,触发条件所对应的下一个状态都封装到一个结构中;所述结构为状态机的结构。可见,该方法明确了状态机某个触发条件下固定的下一状态是什么,不是走到一个状态再判断下一个状态是什么,增加触发条件和下一状态的机制,降低流程复杂性,更容易理解和调试,使理解流程和调试都能更加便捷。基于上述方法,具体的,处理函数用于递送触发条件给状态机。进一步的,所述方法还包括:在封装的结构中添加循环函数,由循环函数轮询处理状态机。其中,所述循环函数用于接收触发状态的信号量,进入到信号量对应的状态,判断触发事件所指向的下一个状态,更新到下一个状态,并执行下一个状态的处理函数。本方法明确了状态机某个触发条件下固定的下一状态是什么,不是走到一个状态再判断下一个状态是什么。增加触发条件和下一状态的机制,更容易理解和调试,本专利技术使人更容易理解状态的走向,为代码调试提供了便利。本专利技术提供了一个更加清晰的状态机处理方式,使其理解流程和调试都能更加便捷。基于本方法,具体的,对处理流程规划具体的状态数量,每个状态执行哪些操作,什么条件能触发这个状态,触发条件所对应的下一个状态;当前状态的处理函数内可以递送触发条件给状态机,这样就可以不用依靠处理函数的返回值来决定下一步是哪个状态;创建一个单独的线程,专门处理状态机的状态处理函数和状态转换操作。详细的,本专利技术中状态机的结构如下:structfsm={//STATE_A{{本文档来自技高网
...
一种软件实现状态机的方法及装置

【技术保护点】
一种软件实现状态机的方法,其特征在于,包括:对状态机的处理流程进行分析,确定所述处理流程所需要的状态的个数;对于所述处理流程所需要的每个状态,建立每个状态下的触发条件以及在该触发条件下的下一个对应的状态;对于所述处理流程所需要的每个状态,建立每个状态的处理函数;将状态、处理函数、触发条件,触发条件所对应的下一个状态都封装到一个结构中;所述结构为状态机的结构。

【技术特征摘要】
1.一种软件实现状态机的方法,其特征在于,包括:对状态机的处理流程进行分析,确定所述处理流程所需要的状态的个数;对于所述处理流程所需要的每个状态,建立每个状态下的触发条件以及在该触发条件下的下一个对应的状态;对于所述处理流程所需要的每个状态,建立每个状态的处理函数;将状态、处理函数、触发条件,触发条件所对应的下一个状态都封装到一个结构中;所述结构为状态机的结构。2.如权利要求1所述的方法,其特征在于,处理函数用于递送触发条件给状态机。3.如权利要求2所述的方法,其特征在于,还包括:在封装的结构中添加循环函数,由循环函数轮询处理状态机。4.如权利要求3所述的方法,其特征在于,所述循环函数用于接收触发状态的信号量,进入到信号量对应的状态,判断触发事件所指向的下一个状态,更新到下一个状态,并执行下一个状态的处理函数。5.一种软件实现状态机的装置,其特征在于,用于实现如权利要求1...

【专利技术属性】
技术研发人员:牛佳宁
申请(专利权)人:郑州云海信息技术有限公司
类型:发明
国别省市:河南,41

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1