QP运行架构图QF.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
QP运行架构图QF

QP运行架构图(QF) QF是一个事件驱动框架。应用程序可以创建事件实例,放到事件池中,并分发事件到相应注册了这个事件的活动对象(状态机,任务)AO中【应用程序可以注册特定的事件,当有事件发生时,QF就会分发事件到AO中】,有两种事件分发方式,并支持两种对任务的调度方式。 应用程序是由多个AO组成,每个AO可以认为是一个任务。把硬件中断程序也当做AO看待,只是优先级比较高。可以把QF理解为软件总线(software bus,SBus)。在这个软件总线上连接着很多的AO和硬件中断服务程序ISR【最多可以支持63个AO+ISR】,QF负责事件的存贮、分发,也就是事件驱动。 1、QF中事件的分发 如图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/S(Publish-Subscribe出版-订阅)方式分发事件,也就是P/S投递事件。 这种方式分发事件AO不用知道目标AO,QF查找AO订阅事件表就知道把事件分发到什么地方。P/S投递方式减少了AO之间的耦合度。使用 void?QF_publish(QEvent const *e)函数分发事件。 图1:QF软件总线和两种投递事件方式 2、QF中的数据结构表 框架QF包括活动对象AO,每个AO包含一个AO队列(QEQueue)和状态机。 QF中还有5个主要的数据结构表,其中有3个AO相关的数据结构:AO订阅事件表,AO队列状态表,AO注册表;有1个事件池QMPool,用于保存事件实例,其它事件都是对这个事件实例的引用;有1个时间事件链表QtimeEvt,用于定时事件处理。图2是相应数据表与QF和AO的关系。 图2:QF框架及五个数据表 变量结构体相关: 图 :QP 事件池中事件实例的存放(QMPOOL) 图 :QP 中的事件队列的环状队列(QEQueue) 向QEQueue队列中加入事件或信号的操作过程: 从QEQueue队列中取出事件或信号的操作过程: 在QP的事件分发中,事件实例储存在事件池中,QP平台采用的是传递事件指针的形式,这样显著减小了系统中??列需求对内存的开销。 图:QP 的事件分发机制 在QEP的原理中,每一个活动对象(一个状态机)都有自己的事件队列,当有ISR到来时,会根据不同的活动对象进行事件的处理,参见下图。 图:QEP的事件处理模型 3、QF运行过程 QF运行时,包括的过程有:(1)QF初始化;(2)AO和ISR产生事件;(3)分发事件到AO队列;(4)循环调度分派事件到状态机。 在把事件放到AO队列中时,会置1 AO队列状态表相应位;从AO队列中取出事件时,会置0 AO队列状态表相应位。总之,放事件到AO队列或从AO队列取事件,都会修改AO队列状态表。 图3:QF运行过程及数据表关系

文档评论(0)

2017ll + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档