欢迎来到天天文库
浏览记录
ID:17006639
大小:50.33 KB
页数:13页
时间:2018-08-26
《层次状态机(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
此文档下载收益归作者所有