美文网首页vsf专辑
必修:VSF的事件驱动

必修:VSF的事件驱动

作者: vsf_simon | 来源:发表于2017-09-03 16:10 被阅读0次

设计上,VSF的底层核心是一个参照UML设计的状态机构架。不过,我这里先不准备讲状态机,因为VSF里的状态机构架从来都没有被用到过,哪怕一次。实质上,VSF底层的核心是事件驱动。

事件驱动应该有不少人了解,说白了,就是由事件来驱动程序的运行。在VSF里,可以总结为:有事件处理,没事件休眠。系统的关键在于处理好3种实时性任务--硬实时、软实时、非实时。事件驱动系统也同样需要处理好这3种任务。下面就以VSF的抢占式构架来说明一下。

VSF系统的抢占式构架的流程图如下(支持硬实时、软实时和非实时):


vsfpre.png

针对3种实时性任务:
main里的运行的是非实时队列。main函数里会初始化所有任务,然后进入while循环。while循环里,判断main队列中是否有事件等待,有的话就一一取出并分发给对应任务处理,没有的话就休眠。
PendSV里运行的是软实时队列(可以抢占main中的非实时队列),只是读出PendSV队列中的事件,并一一分发给对应任务处理。
然后就是系统各种中断,直接处理实时性代码,并且发送事件到对应的队列。根据应用需求,这里可以发给软实时队列(PendSV队列,发送事件后,还会自动使能PendSV),也可以发给非实时队列(main队列)。

所以,VSF中的任务优先级实质是事件队列的优先级,VSF中的抢占只是MCU本身中断的抢占。典型构架中使用了非实时队列(main队列)和软实时队列(PendSV队列),而实际应用中,还可以用其他一个或者多个中断实现出额外优先级的事件队列。

为了节省资源,VSF还可以被配置为协作式构架,流程图如下:


vsfco.png

协作式构架中,没有非实时队列和软实时队列,中断产生的事件是直接调用任务的evt_handler(事件处理函数)处理了,并且所有中断不互相抢占。协作式构架是目前VSF最常用的构架,因为是资源占用最小的方式。

那么关于VSF中的任务的话,底层都只是一个evt_handler(事件处理函数),用于处理各个事件。当然,VSF的任务高层有更加简单的实现方式,这些以后会一一说明。

相关文章

  • 必修:VSF的事件驱动

    设计上,VSF的底层核心是一个参照UML设计的状态机构架。不过,我这里先不准备讲状态机,因为VSF里的状态机构架从...

  • VSF介绍和起源

    VSF的全称是Versaloon Software Framework,是一个事件驱动的状态机系统构架,可以配置为...

  • 必修: VSF中的抢占与协作以及实时性优先级和线程安全问题

    参考:VSF的事件驱动: http://www.jianshu.com/p/f0cbf86d8fed 这里介绍一下...

  • VSF中的通用USB设备协议栈:应用部分

    VSF中实现了一个相对通用的USB设备端协议栈,可以通过移植芯片的USB SIE驱动,来支持不同的MCU。USB设...

  • VSF的RAD开发方式

    之前把VSF的几种底层任务形式都简单介绍了一边,后面就线跳过VSF里的中间层,先用一个应用demo来演示一下VSF...

  • 小研05:关于等保2.0市场空间测算的思考

    网络安全行业主要的驱动因素包括合规驱动、事件驱动、技术驱动、业务驱动,其中合规驱动和事件驱动在当前阶段影响最大。预...

  • 什么是回调

    程序可以分为两种:「非事件驱动」型程序、「事件驱动(event-driven)」型程序。 • 非事件驱动型程序 这...

  • 事件

    事件 1.事件驱动与数据驱动 用原生JavaScript事件驱动通常是这样的流程: 先通过特定的选择器查找到需要操...

  • 02.12事件绑定

    JS是事件驱动语言 1.事件三要素:事件源、事件、事件驱动程序 2.绑定事件a。 直接通过标签绑定事件-直接在事件...

  • Spring的事件驱动模型

    Spring的事件驱动模型 事件驱动模型的三大组成部分 事件:ApplicationEvent 抽象类—继承自 J...

网友评论

    本文标题:必修:VSF的事件驱动

    本文链接:https://www.haomeiwen.com/subject/kmljjxtx.html