分层状态机编码与执行模型解析
1. 分层状态机编码
很多人存在误解,认为将分层状态机(UML 状态图)转换为高效且易于维护的 C 或 C++ 代码需要大型的设计自动化工具。实际上,借助 QF 实时框架和 QEP 分层处理器(它们都是 QP 事件驱动平台的一部分),我们可以手动编写状态机代码。以“Fly ‘n’ Shoot”游戏中的飞船状态机为例,下面分三步进行讲解。
1.1 定义飞船结构
在这一步,我们要定义飞船的数据结构。和事件类似,我们使用继承从框架结构 QActive 派生出飞船结构,这样就将飞船结构与 QF 框架关联起来了。
QActive 基结构的主要职责是存储状态机当前活动状态的信息,以及飞船活动对象的事件队列和优先级。实际上,QActive 本身是从更简单的 QEP 结构 QHsm 派生而来的,QHsm 仅表示分层状态机的当前活动状态。此外,几乎每个状态机都需要存储其他“扩展状态”信息,比如飞船对象需要维护飞船的位置和游戏中积累的分数。我们通过在基结构成员 super 之后列出的数据成员来提供这些额外信息,如下所示:
#include "qp_port.h" /* the QP port */
#include "bsp.h" /* Board Support Package */
#include "game.h" /* this application */
/* local objects --------------------------------------------------------*/
typedef struct ShipT
超级会员免费看
订阅专栏 解锁全文
4万+

被折叠的 条评论
为什么被折叠?



