QP之QEP事件分配流程分析
*********************************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事件分配流程分析的更多相关文章
- Nginx 多进程连接请求/事件分发流程分析
Nginx使用多进程的方法进行任务处理,每个worker进程只有一个线程,单线程循环处理全部监听的事件.本文重点分析一下多进程间的负载均衡问题以及Nginx多进程事件处理流程,方便大家自己写程序的时候 ...
- javascript事件执行流程分析
我一直想搞清楚事件在DOM中的传播方式,今天经高人指点终于明白一二.首先扒了一张图: 事件捕获过程:当我们点击TEXT时,首先是window->document->body->div ...
- springBoot高级:自动配置分析,事件监听,启动流程分析,监控,部署
知识点梳理 课堂讲义 02-SpringBoot自动配置-@Conditional使用 Condition是Spring4.0后引入的条件化配置接口,通过实现Condition接口可以完成有条件的加载 ...
- Spring事件监听ApplicationListener源码流程分析
spring的事件机制是基于观察者设计模式的,ApplicationListener#onApplicationEvent(Event)方法,用于对事件的处理 .在容器初始化的时候执行注册到容器中的L ...
- SQL Server中CURD语句的锁流程分析
我只在数据库选项已开启“行版本控制的已提交读”(READ_COMMITTED_SNAPSHOT为ON)中进行了观察. 因此只适用于这种环境的数据库. 该类数据库支持四种不同事务隔离级别,下面分别观察数 ...
- spark 启动job的流程分析
从WordCount開始分析 编写一个样例程序 编写一个从HDFS中读取并计算wordcount的样例程序: packageorg.apache.spark.examples importorg.ap ...
- Hogp连接流程分析
当BLE设备已经完成配对,并且完成GATT服务的搜索,下一步就开始profile 的连接流程了,一般LE设备都是走的HOGP的流程,我们这篇文章就分析一下hogp的连接流程. 连接是从framewor ...
- imx6 uboot启动流程分析
参考http://blog.csdn.net/skyflying2012/article/details/25804209 这里以imx6平台为例,分析uboot启动流程对于任何程序,入口函数是在链接 ...
- freeswitch呼叫流程分析
今天翻文档时发现之前整理的关于freeswitch呼叫相关的内容,写成博文分享出来也方便我以后查阅. 整体结构图 FreeswitchCore 模块加载过程 freeswitch主程序初始化时会从mo ...
- 【转】Hostapd工作流程分析
[转]Hostapd工作流程分析 转自:http://blog.chinaunix.net/uid-30081165-id-5290531.html Hostapd是一个运行在用户态的守护进程,可以通 ...
随机推荐
- C++指针【cherno课程学习】
定义: 指针是一个整数,一种存储内存地址的数字 内存就像一条线性的线,在这条街上的每一个房子都有一个号码和地址 类似比喻成电脑,这条街上每一个房子的地址 是一个字节 我们需要能够准确找到这些地址的方法 ...
- Redis 数据结构-简单动态字符串
Redis 数据结构-简单动态字符串 无边落木萧萧下,不尽长江滚滚来. 1.简介 Redis 之所以快主要得益于它的数据结构.操作内存数据库.单线程和多路 I/O 复用模型,进一步窥探下它常见的五种基 ...
- Nodejs报错记录
◉ digital envelope routines::unsupported D:\workspace\vuedemo> npm run dev ... error:0308010C:dig ...
- 目标检测+双目测距——基于yolov5
效果 测试例子1 输入: 左图 右图 输出: 测试例子2 输入: 左图 右图 输出: 测试例子3 输入: 左图 右图 输出: 核心代码 基于yolov5-6.1版本和双目测距+点云--使用Middle ...
- JS实现excel数据透析,形成关系图
网上查了好多例子,都没有找到答案,只能自己硬着头皮写了 想要的样子: 下面是DEMO,已经实现效果了!!!! 举例 导入 <!DOCTYPE html> <html lang=&q ...
- Stream流中的常用方法_skip-Stream流中的常用方法_concat
Stream流中的常用方法_skip 如果希望跳过前几个元素,可以使用skip方法获取一个截取之后的新流∶ 如果流的当前长度大于n,则跳过前n个;否则将会得到一个长度为0的空流.基本使用: Strea ...
- do-while循环-练习_用循环求出1-100之间的耦合数
do-while循环 do..while循环格式 初始化表达式① do{ 循环体③ 步进表达式④ }while(布尔表达式②); 执行流程 执行顺序:①③④>②③④>②③④-②不满足为止. ...
- drf-day3——drf整体流程、APIView执行流程及源码分析、Request对象源码分析、序列化器介绍和使用、反序列化的使用、反序列化的校验
目录 一.drf 整体内容 二.APIView执行流程--源码分析(难,了解) 2.1 基于APIView+JsonResponse编写接口 2.2 基于APIView+Response 写接口 2. ...
- MD5在Python中的简单使用
MD5不是加密 https://draveness.me/whys-the-design-password-with-md5/ 参考为什么这么设计 Message-Digest Algorithm 5 ...
- Vue3 企业级优雅实战 - 组件库框架 - 11 组件库的打包构建和发布
回顾第一篇文章中谈到的组件库的几个方面,只剩下最后的.也是最重要的组件库的打包构建.本地发布.远程发布了. 1 组件库构建 组件库的入口是 packages/yyg-demo-ui,构建组件库有两个步 ...