QP 状态机学习笔记2(第四章)

QEP层次式事件处理器

Q-SPY 软件追踪输出

事件实例= 信号 + 事件变量

用父类指针指向子类对象,在使用子类的时候需要将其转换成子类指针。

事件实例主要被当做“包”来使用,来传递信号和事件参数。

关键语句

问题

文中关键语句:

QEP内部维护一个不变的保留事件数组

QEP_reservedEvt_[]
关键结构体
typedef struct {
    QSignal sig;              /*!< signal of the event instance */
    uint8_t poolId_;          /*!< pool ID (0 for static event) */
    uint8_t volatile refCtr_;    /*!< reference counter */
} QEvt;

typedef QEvt QEvent;

union QHsmAttr {

    QStateHandler  fun;        /*!< pointer to a state-handler function */

    QActionHandler act;        /*!< pointer to an action-handlerfunction */

   struct QMState const *obj;         /*!< pointer to QMState object */

   struct QMTranActTable const *tatbl;     /*!< transition-action table*/

};

 

 

typedef struct {

   struct QHsmVtbl const *vptr;  /*!< virtual pointer */

   union QHsmAttr state;  /*!<current active state (state-variable) */

   union QHsmAttr temp;  /*!<temporary: tran. chain, target state, etc. */

} QHsm;

typedefQHsm     QFsm;  //也就是说 QFsm和QHsm一样

这个实现的和应用程序相关的部分提供的要素展示在图3.9 的虚线部分。这些要素是:

1.   从QEvent结构派生的带有参数的事件

2.   从QFsm 派生的包含全部扩展状态变量的状态机结构

3.  全部状态处理函数

QEP_TRIG_函数  :触发一个状态。

状态机转换的优化

    对需要高效执行的最常用的状态转换类型的工作量所做的优化。

使用QEP实现HSM步骤的概要

1.  枚举信号、

2.  定义事件

3.  派生特定的状态机

4.  定义初始伪状态

5.  定义状态处理函数

UML状态机结合成系统:

    生成事件->对事件进行排队->围绕状态机编写代码让他们全部运行->用一种即时方式通信并且不会产生并发危急



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值