(LCA)共同祖先状态:首先找到s(原状态)能处理t(目标状态)的超状态,然后找到t(目标状态)到上一步超状态的退出路径p[]并保存,
最后沿着退出路径进入t目标状态。

QHsm_dispatch_(QHsm * const me, QEvt const * const e) {(通过函数参数me传入终状态)

typedef QState (*QStateHandler)(void * const me, QEvt const * const e);(QStateHandler为函数指针,QState为unsigned int类型)
QStateHandler  path[QHSM_MAX_NEST_DEPTH_];(QHSM_MAX_NEST_DEPTH_为状态机嵌套的最大深度)

s(source,源状态)

t(target,终状态)

r(return,状态函数返回值)

******************************************************

s = me->temp.fun;

在initial时会使用Q_TRAN(target_),  Q_TRAN调用会将状态事件函数指针传入(me)->temp.fun

r = (*s)(me, e);调用状态处理程序

1.函数调用流程#define Q_TRAN(target_)  \
    ((Q_HSM_UPCAST(me))->temp.fun = Q_STATE_CAST(target_), (QState)Q_RET_TRAN)(将target_转化为具体事件的状态变化函数)

程序调用完成返回status_ = Q_HANDLED();

#define Q_HANDLED()      ((QState)Q_RET_HANDLED)      Q_RET_HANDLED为传递给子机超状态的事件

2.参数e的调用流程 在QF_run(void) {函数中 得到e = QActive_get_(a); 调用 QHSM_DISPATCH(&a->super, e, a->prio);将e值传递

#define QHSM_DISPATCH(me_, e_, dummy) \
          ((*(me_)->vptr->dispatch)((me_), (e_)))

void QHsm_ctor(QHsm * const me, QStateHandler initial) {
    static struct QHsmVtbl const vtbl = { /* QHsm virtual table */
        &QHsm_init_,
        &QHsm_dispatch_
    };
    me->vptr      = &vtbl;
    me->state.fun = Q_STATE_CAST(&QHsm_top);
    me->temp.fun  = initial;
}

************************************************************

最新文章

  1. 网络知识学习1---(基础知识:ISO/OSI七层模型和TCP/IP四层模型)
  2. Java汉字转拼音
  3. mysql ODBC 在64位下提示找不到odbc驱动问题
  4. JAVA基础英语单词表(上)
  5. jquery在不同浏览器获取文件路径出现问题!
  6. Altium Designer 6 快速进行差分对走线
  7. javascript第十五课:DOM
  8. 十二、 Spring Boot 静态资源处理
  9. python中 functools模块 闭包的两个好朋友partial偏函数和wraps包裹
  10. IPython绘图和可视化---matplotlib
  11. CCS中cmd文件的编写
  12. MySQL 日期类型函数及使用
  13. ireport使用
  14. Asp.netMVC中Html.Partial,RenderPartial,Action,RenderAction区别和用法
  15. 20172301 2017-2018-2 《程序设计与数据结构》实验一《Java开发环境的熟悉》实验报告
  16. python 库资源大全
  17. sqoop2-1.99.5-cdh5.5.4.tar.gz的部署搭建
  18. Tensorboard 的使用笔记
  19. ssh & sftp & MacOS
  20. 大端小端转换,le32_to_cpu 和cpu_to_le32

热门文章

  1. 04-CURD
  2. .Net 7 的AOT的程序比托管代码更容易破解?
  3. 掌握webpack(一)一张图让你明白webpack中output的filename、path、publicPath与主流插件的关系
  4. P1162填涂颜色——题解
  5. python3连接postgresql/greenpulm
  6. Java基础学习笔记-类的静态属性和静态方法--待继续补充
  7. Java基础学习笔记-运算符ヽ( ̄▽ ̄)و
  8. C#零基础小白快速入门
  9. 【学习笔记】QT从入门到实战完整版(Lambda)(2)
  10. java优化几个小步骤