QP运行架构图(QF).docVIP

  • 25
  • 0
  • 约1.05千字
  • 约 6页
  • 2017-02-08 发布于重庆
  • 举报
QP运行架构图(QF)

QP运行架构图(QF) QF是一个事件驱动框架。应用程序可以创建事件实例,放到事件池中,并分发事件到相应注册了这个事件的活动对象状态机任务AO中应用程序可以注册特定的事件,当有事件发生时,QF就会分发事件到AO中有两种事件分发方式,并支持两种对任务的调度方式应用程序是由多个AO组成,每个AO可以认为是一个任务。把硬件中断程序也当做AO看待,只是优先级比较高。可以把QF理解为软件总线software bus,SBus)。在这个软件总线上连接着很多的AO和硬件中断服务程序ISR最多可以支持63个AO+ISR,QF负责事件的存贮、分发,也就是事件驱动。 1QF中事件的分发 如图1所示,QF是个软件总线,在这个软件总线上连接着AO和ISR。QF中包含5个主要的数据结构QF有两种事件的分发方式。 1)直接分发事件: 一个AO直接分发事件到另一个AO,就是直接投递事件。这种方式分发事件的AO要知道目标AO。使用void?QActive_postFIFO(QActive *me, QEvent const *e)?函数分发事件。 2)P/S分发事件: 利用QF中的AO订阅事件表,以P/SPublish-Subscribe出版-订阅方式分发事件,也就是P/S投递事件。 这种方式分发事件AO不用知道目标AO,QF查找AO订阅事件表就知道把事件分发到什么地方。P/S投递方式减少了AO之间的耦合度。使用 void?QF_publish(QEvent const *e)函数分发事件。 图1QF软件总线和两种投递事件方式QF中的数据结构表 框架QF包括活动对象AO,每个AO包含一个AO队列QEQueue)和状态机。QF中还有5个主要的数据结构表,其中有3个AO相关的数据结构:AO订阅事件表,AO队列状态表,AO注册表;有1个事件池QMPool,用于保存事件实例,其它事件都是对这个事件实例的引用;有1个时间事件链表QtimeEvt,用于定时事件处理。图是相应数据表与QF和AO的关系。 图QF框架及五个数据表 QF运行QF运行时,包括的过程有(1)QF初始化;(2)AO和ISR产生事件;(3)分发事件到AO队列;(4)循环调度分派事件到状态机。 在把事件放到AO队列中时,会置1 AO队列状态表相应位;从AO队列中取出事件时,会置0 AO队列状态表相应位。总之,放事件到AO队列或从AO队列取事件,都会修改AO队列状态表。 图QF运行过程及数据表关系

文档评论(0)

1亿VIP精品文档

相关文档