层次状态机(hsm)用c语言的实现

层次状态机(hsm)用c语言的实现

ID:17006639

大小:50.33 KB

页数:13页

时间:2018-08-26

层次状态机(hsm)用c语言的实现_第1页
层次状态机(hsm)用c语言的实现_第2页
层次状态机(hsm)用c语言的实现_第3页
层次状态机(hsm)用c语言的实现_第4页
层次状态机(hsm)用c语言的实现_第5页
资源描述:

《层次状态机(hsm)用c语言的实现》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、分类: 本文讲述层次状态机实现形式中的行为继承。从行为继承与类继承之间的OO类相似来看,一个成功的层次状态机应该能够模拟下列属于C++对象模型。²        使用和维护简单²        应允许转态机拓扑容易改变,不应要求转换连接的人工代码,所需要的修改限制在代码的一个地方。²        提供好的运行-时间效率和小的存储。²        遵守C++中的“零额外开销”原则。为了满足上面的要求,层次状态机的实现着重于下面的主要元素:²        完全支持行为继承的层次关系²        用状态进入和

2、退出动作实现有保证得初始化和清除²        通过类继承支持规定的状态模型1.      基本要素(1)     状态:在层次状态的情形下,状态处理器必须返回朝状态,这导致层次状态处理特征标记的递归定义。构造这种特征标记在C++是不可能的,于是定义下面宏来近似:typedef void (*QPseudoState)(QEVENT const *pEvent);typedef QPseudoState(*QState)(QEVENT const *pEvent);(2)     进入/退出动作和初始状态:这些

3、元素是状态专有的特征,在转态中他们被定义,而特别的是与到达状态所进过的路径无关。保留信号的转态定义为:typedef enum tagQSIG{            Q_EMPTY_SIG=1,            Q_INIT_SIG,            Q_ENTRY_SIG,            Q_EXIT_SIG,            Q_USER_SIG,}QSIG;状态处理机可以用一般的switch语句规定适当的用例处理这些信号,可以自由的执行相应信号的操作。(3)     状态转换:状

4、态处理机用Q_TRAN实现状态转换,并且在原状态的上下文中执行动作,即:改变状态之前调用Q_TRAN(和UML规定不一致)。YibinCityCitytracktrafficplanningisYibincityregionalrangewithintracktrafficsystemofonceintegration,andcitytracktrafficalsoisYibinCityCityintegratedtracktrafficsystemintheofpart,foraccurategraspcity

5、tracktrafficresearchofobject#define Q_TRAN(target_)Q_TranDyc((QState)(target_))(4)     Top状态和初始伪状态:每个层次状态机都有一个Top状态,包括整个状态的所有其它元素。Top状态没有超状态,用户也不能覆盖;Top状态的唯一目的是提供状态层次的最高的根,使最高处理器能返回Top;Top状态唯一能订制的是初始化。初始化伪状态处理机仅规定初始化转换,必须指明被窃套的Top状态的状态机的缺省状态。 2.         实现代码:

6、(1)         头文件代码:#ifndef STATE_INHERIT_H#define STATE_INHERIT_H typedef unsigned short QSIG;//Definethesignalofstatemachineenum{    Q_EMPTY_SIG=0,    Q_INIT_SIG=1,    Q_ENTRY_SIG,    Q_EXIT_SIG,    Q_USER_SIG}; //Definethesignalofstatemachinetypedef struct t

7、agQEVENT{  QSIGsig;YibinCityCitytracktrafficplanningisYibincityregionalrangewithintracktrafficsystemofonceintegration,andcitytracktrafficalsoisYibinCityCityintegratedtracktrafficsystemintheofpart,foraccurategraspcitytracktrafficresearchofobject  unsigned char

8、 *pEvent1;  unsigned char *pEvent2;  //TODO:addfieldstotheevent}QEVENT; //definestatedatatypetypedef void (*QPseudoState)(QEVENT const *pEvent);typedef QPseudoState(*QState)(QEVENT const 

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

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

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