实时框架中的时间事件与原生事件队列解析
1. 时间事件的内部表示与管理
时间事件在系统中有着重要的作用,其内部表示与管理机制是理解系统运行的关键。QF 使用双向链表来管理所有已激活的时间事件。在这个链表中,新激活的时间事件总是被插入到链表头部。系统时钟每次滴答时,都会从链表头部开始扫描。
当一个时间事件被解除激活时,比如一次性定时器到期自动解除,或者应用程序调用 QTimeEvt_disarm() 函数显式解除,该时间事件会从链表中移除。从双向链表中移除一个对象是一个快速且确定的操作,不需要从链表头部重新扫描。解除激活的时间事件会留在链表外,不会消耗 CPU 周期。
2. 系统时钟滴答与 QF_tick() 函数
为了管理时间事件,需要从一个被称为系统时钟滴答的周期性时间源调用 QF_tick() 函数。系统时钟滴答的频率通常在 10Hz 到 100Hz 之间。
QF_tick() 函数的实现如下:
void QF_tick(void) {
/* see NOTE01 */
QTimeEvt *t;
QF_INT_LOCK_KEY_
(1)
QF_INT_LOCK_();
(2)
t = QF_timeEvtListHead_;
/* start scanning the list from the head */
(3)
while (t != (QTimeEvt *)0) {
(
实时框架时间事件与原生事件队列解析
超级会员免费看
订阅专栏 解锁全文

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



