当前位置:主页 > 365bet大陆 >
QP的QP原理
来源:365bet官网手机版 作者:365bet网投网 发布时间:2019-06-09 阅读次数:859
(2)状态功能显示
在QP中,函数用于表示称为状态函数的状态,状态由状态函数表示,并且系统具有可由多个函数表示的若干状态。
QStateHandler状态函数指针在QEP中定义,并且此函数指针可以指向任何状态函数。
状态函数使用命令---明确定义的情况对各种事件(信号)进行分类。
状态函数指针定义如下:
typedefQState(* QStateHandler)(void * me,QEventconst * e); / *指向状态机状态函数的状态函数指针* /
QState是调用状态函数的返回值,定义如下:
typedefuint8_tQState; / *状态返回值,状态机状态处理函数的返回值* /
有四个返回值。0 --- QRETHANDLED。表示事件已处理但没有称为内部转换的转换。1 --- QRETIGNORED表示该事件被忽略且不会被处理。2 --- QRETTRAN。表示事件已处理且存在转换,转换为其他状态。3 --- QRETSUPER。表示已输入主状态。这仅适用于HSM分层状态机。
(3)状态机的当前状态。
FSM平面状态机或HSM分层状态机是指向状态函数的指针,并在内部指示状态函数指向哪个状态函数以及它对应于哪个状态函数。定义为处理当前状态,在发生事件时处理事件。
状态机中有几种状态,但同时只有一个“焦点”(当前状态),“焦点”可以用QTRAN(目标)改变。
当前状态变量定义如下:
typedefstruct QFsmTag{Q状态处理程序状态; / *状态变量,当前活动状态。这通常用于me-state * /。
QFsm; / * FSM平面状态机的数据结构* /
typedefstructQFsmTagQHsm; / *与FSM相同的分层状态机的HSM数据结构
状态转换定义如下:
#define Q_TRAN(target _)(((QFsm *)me)-state =(QStateHandler)(target_),Q_RET_TRAN)
发送到状态机的事件始终发送到当前状态变量指向的状态函数。
(4)事件处理单元
事件处理程序也可以理解为状态机引擎。处理事件时,调用当前状态的状态函数来处理事件,处理调用状态函数的返回值,并根据以下值进行相应的状态转换:返回值(例如,父状态)。
同时,状态电机还处理状态输入(ENTER)和退出(EXIT)并处理初始伪状态。
事件处理程序使用状态函数指针来调用状态函数,并始终将事件发送到当前状态,但是由调用结果确定,事件不会在当前状态下处理。