首页 > 其他 > 详细

QP之QEP事件分配流程分析

时间:2021-05-23 22:59:28      阅读:26      评论:0      收藏:0      [点我收藏+]

*********************************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事件分配流程分析

原文:https://www.cnblogs.com/zhanyaowang/p/14802276.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!