QF实时框架的事件处理与管理机制解析
1. 执行线程与活动对象优先级
每个QF活动对象都在其自身的线程中执行。活动对象线程内的实际控制流取决于所使用的多任务模型,但事件处理始终包括以下三个基本步骤:
// Listing 7.8 The three steps of an active object thread
(1)
QEvent const *e = QActive_get_(a);
/* get the next event for AO ‘a’ */
(2)
QF_ACTIVE_DISPATCH_(&a->super, e);
/* dispatch to the AO ‘a’ */
(3)
QF_gc(e);
/* determine if event ‘e’ is garbage and collect it if so */
这三个步骤的具体说明如下:
1. 事件提取 :通过 QActive_get_() 函数从活动对象的事件队列中提取事件。在阻塞内核中,此函数可能会阻塞。
2. 事件分发 :将事件分发到活动对象的状态机进行处理。
3. 垃圾回收 :将事件传递给QF垃圾回收器进行回收。只有当垃圾回收器确定事件不再被引用时,才会实际回收该事件。
在传统的RTOS(如VxWorks)或多任务操作系统(如Linux)中,上述三个事件处理步骤通常包含在一个无限循环中。而在协作式“香草”内核或RTC内
超级会员免费看
订阅专栏 解锁全文
516

被折叠的 条评论
为什么被折叠?



