*********************************1***********************************

QActive *AO_Blinky = &l_blinky.super;

当建立Blinky    l_blinky事件后

typedef struct {
/* protected: */
QActive super;

/* private: */
QTimeEvt timeEvt;
} Blinky;

一个事件包括活动对象和时间事件

执行

void QActive_ctor(QActive * const me, QStateHandler initial) 和

QTimeEvt_ctorX(&me->timeEvt, (QActive *)0, TIMEOUT_SIG, (uint8_t)0);进行时间事件初始化

*********************************1***********************************

*********************************2***********************************

执行QACTIVE_START(AO_Blinky, 1,
blinky_queueSto, Q_DIM(blinky_queueSto),
(void *)0, 1024, (QEvt *)0);启动上一步赋值虚函数表后的QActive_start_函数

过程QActive_start_()---->QHSM_INIT()----->QHsm_init_()------>r = (*me->temp.fun)()前边通过初始化me->temp.fun  = initial;则执行Blinky_initial()将i_blinky中的timeevt中的act和ctr赋值,ctr为QTimeEvt_armX()计数值,在每次QF_tickX_()(只能通过宏QF_TICK_X()调用)调用中,下行计数器减少1。时间事件触发(被发布或发布)时,down-counter达到零。当ctr计数值达到时,在QF_tickX_()函数中调用QACTIVE_POST(act, &t->super, sender)函数即调用QActive_post_()通过调用宏定义QACTIVE_EQUEUE_SIGNAL_(me)即调用

QPSet_insert(&QV_readySet_, (uint_fast8_t)(me_)->prio)函数将事件标志位写1,事件执行结束调用QPSet_remove(&QV_readySet_, p)将标识位清0.

*********************************2***********************************

*********************************3***********************************

在QF_run()死循环中调用QPSet_notEmpty(&QV_readySet_)函数检查标识位

QF_tickX_必须周期性地从定时ISR调用或通过一个任务QTicker_ctor(需定义一个时钟任务)任务中通过QTicker_dispatch_调用QF_tickX_

在qf_port.h中定义QF_INT_ENABLE()和QF_INT_DISABLE()执行中断的开启和关闭保护代码零界段

void SysTick_Handler(void)
{
//printf("systick\n");

#ifdef Q_SPY
{
tmp = SysTick->CTRL; /* clear SysTick_CTRL_COUNTFLAG */
QS_tickTime_ += QS_tickPeriod_; /* account for the clock rollover */
}
#endif

QF_TICK_X(0U, &l_SysTick);
}

在函数SysTick_Handler系统滴答定时器中调用QF_TICK_X()来执行事件的定时分配策略。

*********************************3***********************************

QP之QEP事件分配流程分析的更多相关文章

  1. Nginx 多进程连接请求/事件分发流程分析

    Nginx使用多进程的方法进行任务处理,每个worker进程只有一个线程,单线程循环处理全部监听的事件.本文重点分析一下多进程间的负载均衡问题以及Nginx多进程事件处理流程,方便大家自己写程序的时候 ...

  2. javascript事件执行流程分析

    我一直想搞清楚事件在DOM中的传播方式,今天经高人指点终于明白一二.首先扒了一张图: 事件捕获过程:当我们点击TEXT时,首先是window->document->body->div ...

  3. springBoot高级:自动配置分析,事件监听,启动流程分析,监控,部署

    知识点梳理 课堂讲义 02-SpringBoot自动配置-@Conditional使用 Condition是Spring4.0后引入的条件化配置接口,通过实现Condition接口可以完成有条件的加载 ...

  4. Spring事件监听ApplicationListener源码流程分析

    spring的事件机制是基于观察者设计模式的,ApplicationListener#onApplicationEvent(Event)方法,用于对事件的处理 .在容器初始化的时候执行注册到容器中的L ...

  5. SQL Server中CURD语句的锁流程分析

    我只在数据库选项已开启“行版本控制的已提交读”(READ_COMMITTED_SNAPSHOT为ON)中进行了观察. 因此只适用于这种环境的数据库. 该类数据库支持四种不同事务隔离级别,下面分别观察数 ...

  6. spark 启动job的流程分析

    从WordCount開始分析 编写一个样例程序 编写一个从HDFS中读取并计算wordcount的样例程序: packageorg.apache.spark.examples importorg.ap ...

  7. Hogp连接流程分析

    当BLE设备已经完成配对,并且完成GATT服务的搜索,下一步就开始profile 的连接流程了,一般LE设备都是走的HOGP的流程,我们这篇文章就分析一下hogp的连接流程. 连接是从framewor ...

  8. imx6 uboot启动流程分析

    参考http://blog.csdn.net/skyflying2012/article/details/25804209 这里以imx6平台为例,分析uboot启动流程对于任何程序,入口函数是在链接 ...

  9. freeswitch呼叫流程分析

    今天翻文档时发现之前整理的关于freeswitch呼叫相关的内容,写成博文分享出来也方便我以后查阅. 整体结构图 FreeswitchCore 模块加载过程 freeswitch主程序初始化时会从mo ...

  10. 【转】Hostapd工作流程分析

    [转]Hostapd工作流程分析 转自:http://blog.chinaunix.net/uid-30081165-id-5290531.html Hostapd是一个运行在用户态的守护进程,可以通 ...

随机推荐

  1. 痞子衡嵌入式:Farewell, 我的写博故事2022

    -- 题图:苏州荷塘月色 2022 年的最后一天,写个年终总结.困扰大家三年之久的新冠疫情终于在 12 月全面放开了,痞子衡暂时还没有阳,计划坚持到总决赛.对于 2023 年,痞子衡还是充满期待的,慢 ...

  2. [python] tensorflow中的argmax()函数argmax()函数

    首先 import tensorflow as tf tf.argmax(tenso,n)函数会返回tensor中参数指定的维度中的最大值的索引或者向量.当tensor为矩阵返回向量,tensor为向 ...

  3. CLISP学习(二)

    它是一门函数式语言,你要用函数的思维来思考. 只不过与数学的表达不同的是,数学里的函数是在括号外  f(x) ,而lisp是在括号内,以列表的形式(f x), cos(x) --> (cos x ...

  4. [C++标准模板库:自修教程与参考手册]关于auto_ptr

    什么是auto_ptr指针 auto_ptr是这样一种指针:它是"它所指的对象"的拥有者,所以,当身为对象拥有者的auto_ptr指针被摧毁时,该对象也会被摧毁,auto_ptr要 ...

  5. P8474 「GLR-R3」立春

    简要题意 \(\tau(\sigma)\) 表示排列 \(\sigma\) 的逆序对个数,求: \[\sum_{i \in \operatorname{permutation(n)}}2^{\tau( ...

  6. Odoo View 常用技巧

    隐藏Field <field name="currency_id" invisible="True"/> <field name=" ...

  7. win32com操作word API精讲 第七集 Range(五)字体格式精讲

    本课程<win32com操作word API精讲&项目实战>视频平台以视频为主,本平台以文字为主,公众号ID:一灯编程 本节课主要讲解使用Range操作Font接口中的字体.字号. ...

  8. Grafana 系列文章(十三):如何用 Loki 收集查看 Kubernetes Events

    前情提要 IoT 边缘集群基于 Kubernetes Events 的告警通知实现 IoT 边缘集群基于 Kubernetes Events 的告警通知实现(二):进一步配置 概述 在分析 K8S 集 ...

  9. day08-SpringMVC底层机制简单实现-04

    SpringMVC底层机制简单实现-04 https://github.com/liyuelian/springmvc-demo.git 8.任务7-完成简单视图解析 功能说明:通过目标方法返回的 S ...

  10. 定位bug

    软件测试阶段:单元测试,集成测试,系统测试,验收测试 测试人员参与的软件测试阶段一般来说只有集成测试和系统测试阶段.集成测试阶段主要测试的是接口:系统测试阶段主要是功能测试,兼容性测试等,涉及到定位b ...