`
charlotte
  • 浏览: 124663 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

初学OSEK/VDX

 
阅读更多

OSEK/VDX:静态定义的实时操作系统?

 

任务篇:

任务是完成特定功能的一段程序,为实现具有不同实时性要求的系统子功能提供了框架,任务可以异步方式“并行”运行,任务具有不同的优先级。

   基本任务和扩展任务都有一个静态的优先级。高优先级任务运行时,低优先级任务会禁止,相同优先级别的任务也会被禁止。

基本任务:

基本任务特征

1.可以被高优先级任务和高优先级中断抢占。

2.可以通过API服务设置不允许被抢占。

基本任务状态:

1.阻塞、就绪、运行 。

  StartOS()时,基本任务通过对OIL文件的配置,来达到操作启动后基本任务的状态。如定义为自启动状态则   操作系统启动后该任务处于就绪状态,反之为阻塞状态。

状态迁移图:

 

扩展任务:

扩展任务特征

       与基本任务类似,多了一个附件状态--等待状态和2个附加事件--wait、trigger。

      扩展任务进入等待状态后会等待一个事件,等待到事件后进入就绪状态。等待状态期间仍然暂用消耗资源,如堆 栈和内存空间。

时序图:

两种任务比较:

基本任务 扩展任务
激活事件 一个 多个
释放处理器方式 被抢断、终止、中断 被抢断、终止、中断
数据流控制 全局变量 局部变量
典型应用 周期轮训 事件驱动

任务优先级:

决定了任务执行的顺序和访问处理器的优先权。优先级是创建任务时静态分配的,某些条件下,OS可动态改变任务优先级(针对资源管理的优先级天花板协议)。数值越大,优先级越高,一致性类定义了是否允许不同的任务具有相同的优先级,具有相同优先级的任务:根据FIFO原则顺序执行。

 

任务调度:

调度程序使用任务的优先级决定哪个单个任务的进入运行状态,每个任务使用静态优先级,运行过程中不能被改变,最低优先级是0.

Full Preemptive:

应用程序中所有任务都被OIL配置成抢占式任务,则该应用白用抢占式调度策略。

抢占式调度程序启用条件:

 

  • 任务被TerminateTask()成功终止
  • 任务被成功终止,且另一个任务被ChainTask()激活
  • 任务被来自 API服务ActivityTask()激活
  • 一个扩展任务被移进等待状态
  • 引起扩展任务进入就绪状态的事件被设置
  • 一个任务级的资源被释放
  • 从中断返回到任务级

 

Non Preemptive:

与抢占式调度策略相反,当应用程序中所有任务都被OIL配置成非抢占式任务,则该应用白用非抢占式调度策略。

非抢占式调度程序启用条件:

 

  • 任务被TerminateTask()成功终止
  • 任务被成功终止,且另一个任务被ChainTask()激活
  • API服务被Schedule()被任务调度
  • 一个扩展任务被移进等待状态

 

 

混合强制式任务调度:

应用程序中部分任务被OIL配置成抢占式另一些为非抢占式任务,则采用混合调度策略。系统根据当前运行任务的抢占类型来决定是否启用调度程序。

 

优先级天花板协议:

OIL中定义资源,在应用程序中为任务集定义这个资源。

 

 

API介绍:

StatusType ActivateTask(TaskType<TaskID>)

使任务由挂起态转为就绪态, OS确保任务代码从第一条语句开始执行

@parameter  TaskID ,为传入的要激活的任务名,该函数也可以在OIL中被调用

返回的错误值

  • E_OK 无错误
  • E_OS_ID 非法的任务ID
  • E_OS_LIMIT 太多次激活调用。

StatusType TerminateTask(void)

终止被调用任务的运行, 任务由运行态进入挂起态

返回的错误值

  • E_OK 无错误
  • E_OS_RESOURCE 资源仍被占用
  • E_OS_CALLEVEL 服务函数是从中断级被调用的

StatusType Schedule(void)

引起任务的重新调度: 如果有更高优先级的任务处于就绪状态,并且任务的内部资源被释放, 那么当前任务转入就绪态, 其上下文会被保存, 更高优先级的任务被执行

返回的错误值

  • E_OK 无错误
  • E_OS_RESOURCE 资源仍被占用
  • E_OS_CALLEVEL 服务函数是从中断级被调用的

StatusType ChainTask (TaskType<TaskID>)

终止当前任务的运行, 并激活后继任务

返回的错误值

  • E_OK 无错误
  • E_OS_ID 非法任务ID
  • E_OS_LIMIT 太多激活请求
  • E_OS_RESOURCE 资源仍被占用
  • E_OS_CALLEVEL 服务函数是从中断级被调用的

StatusType GetTaskID (TaskRefType<TaskID>)

获取当前正在运行的任务的ID信息

返回的错误值

  • E_OK 无错误

StatusType GetTaskState(TaskType<TaskID>Z, TaskStateRefType<State>)

获取当前正在运行的任务的状态信息

返回的错误值

  • E_OK 无错误
  • E_OS_ID 非法的任务ID

中断:

分类:

按照功能将中断处理程序分为两类

  • 第1类ISR: 不使用系统服务函数
  • 第2类ISR: 使用系统服务函数

V2.1规范中规定了第3类ISR,V2.2规范中已将其删除

在第2类ISR中,允许使用除下列之外的所有系统服务函数

  • 引起等待状态(WaitEvent) 
  • 仅对任务起作用的,如:
  1.  
    1. TerminateTask()
    2. ChainTask()
    3. Schedule()
    4. ClearEvent()

事件:

事件描述:

          事件的主要目的是任务同步,事件被任务一对一的拥有,一个任务拥有一个事件时,这个事件即为扩展事件。设置了某事件后, 接收它的任务会切换到就绪状态,当任务表明在“等待某事件”时, 会切换到等待状态。一个任务可接收多个事件,一个事件只能分配给一个任务, 不存在广播事件。

  • 等待(Wait) : 只有扩展任务才能等待事件
  • 设置(Set): 所有任务都可设置事件以及警报、消息和ISR
  • 清除(Clear): 任务只能等待并复位自己的事件
  • 获取(Get): 可以检查其它任务的事件状态



    事件和中断比较:

    中断 事件
    激活方式 由外部事件激活 由外部事件激活
    处理方式 由等待的CPU/中断控制器处理 由等待的任务处理
    优先级 取代低优先级的程序 取代低优先级的任务

    资源:

    资源描述:

    任何为任务/ISR所占用的实体都可称为资源,如:

    • I/O硬件设备
    • 内存区(RAM)
    • 应用程序: 变量, 结构体, 程序段, 等
    • 操作系统实体(调度器)

    资源管理:

    • 两个任务不能同时占用同一资源
    • 不会发生优先级反转(priority inversion)
    • 使用资源不会引起死锁(deadlock)
    • 不会在waiting状态产生资源访问

    标准资源:

    默认资源,操作系统调度器,被作为应用的资源。在任何一个希望在临界区不被另一个任务抢占的应用中,预先定义的资源,当调度器被加锁时,仍然可以接收并处理中断,中断任务作为非抢占式任务。

    特殊资源管理:

    • 禁止对相同资源的嵌套访问
    • 一个任务对多个资源加锁,资源的释放按照LIFO顺序释放。
    • 若确实需嵌套访问,推荐使用一个具有相同行为的资源
    • OIL支持定义具有相同行为的资源: Linked Resource

    资源管理API:

    • DeclareResource(ResourceType<ResID>);
    • StatusType GetResource(ResourceType<ResID>);

    E_OK no error

    E_OS_ID invalid resource ID

    E_OS_ACCESS inadmissible access

    • StatusType ReleaseResource(ResourceType<ResID>);

    E_OK no error

    E_OS_ID invalid resource ID

    E_OS_NOFUNC not occupied or wrong order

    E_OS_ACCESS inadmissible access

    Alarm:

    警报主要用于处理循环发生的事件。

    动态行为:

    • 可在运行时刻设定或更改参考值
    • 单次超时
    • 循环反应

    alarm动作:

    • 激活任务
    • 设置一个事件
    • 调用回调函数

    alarm实现:

    • 使用与具体实现相关的软件计数器
    • 警报的精度取决于实现和配置

    alarm原理:

     

     

     

     

     

    • 大小: 70.8 KB
    • 大小: 31.7 KB
    • 大小: 42.6 KB
    • 大小: 26.5 KB
    分享到:
    评论

    相关推荐

      OSEK/VDX直接网络管理软件的开发

      "OSEK/VDX直接网络管理软件的开发" OSEK/VDX直接网络管理软件的开发是现代汽车行业中不可 thiếu的一部分。随着汽车电子控制单元(ECU)的增加,车辆中的网络互联变得越来越复杂,为了保证网络的安全和可靠性,网络...

      关于OSEK/VDX的论文集

      ### 关于OSEK/VDX的深度解析 #### 引言 随着汽车工业的迅猛发展,汽车电子系统在整车中的重要性与日俱增。从发动机控制到车身电子,从安全系统到信息娱乐,电子控制单元(ECU)的集成度和复杂度不断提高。然而,...

      《OSEK/VDX汽车电子嵌入式软件编程技术》附书光盘

      《OSEK/VDX汽车电子嵌入式软件编程技术》一书附带的光盘包含了丰富的资源,旨在帮助读者深入理解和应用OSEK/VDX标准于汽车电子领域的嵌入式软件开发。OSEK(Open System for Embedded Automotive Engineering)和VDX...

      汽车电子行业专业技术文档,OSEK/VDX的Specification的所有资料文档,英文。

      汽车电子行业专业技术文档,OSEK/VDX的Specification的所有资料文档,英文 OSEK,是指德国的汽车电子类开放系统和对应接口标准(open systems and the corresponding interfaces for automotive electronics),...

      OSEK/VDX Communication Version 3.0.1

      OSEK/VDX Communication Version 3.0.1 OSEK communication (OSEK COM) is a uniform communication environment for automotive control unit application software. The OSEK COM specification increases the ...

      Programming in the OSEK/VDX Environment

      Programming in the OSEK/VDX Environment这本书中的源代码,国内已经有翻译的版本出版。这本书重点讲解了OSEK/VDX的前三个部分。本资源包doc目录包含了编写该代码的是的OSEK/VDX标准,最新的标准在本人上传的另外一...

      基于OSEK/VDX标准的Trampoline操作系统研究

      OSEK/VDX标准是为汽车电子领域设计的一套操作系统规范,旨在促进软件的互操作性和可移植性。Trampoline操作系统是基于这一标准的一种开源实现,由法国通信研究所(IRCCyN)的实时系统组开发。它兼容OSEK/VDX OS 2.2.3...

      OSEK/VDX最新的标准文档

      OSEK/VDX标准是汽车电子领域广泛应用的一套操作系统和通信规范,主要为车载嵌入式系统提供标准化的软件架构。这些标准旨在提高软件的可移植性、可靠性和可维护性,降低开发成本,增强不同组件间的互操作性。下面我们...

      OSEK/VCX汽车电子嵌入式软件编程技术 - 复件_osek_OSEK汽车_汽车

      5. **OSEK/VDX书籍**:由于是市面上唯一一本关于OSEK的书,它可能包含了OSEK/VDX标准的深入解析,包括基本概念、API使用、网络管理策略、任务调度算法、中断处理、错误处理机制等。此外,书籍可能还涵盖了一些实际...

      OSEK/VDX汽车电子嵌入式软件编程 光盤資料

      OSEK/VDX汽车电子嵌入式软件编程 光盤資料

      嵌入式软件编程技术--OSEK/VDX汽车电子原版英文版

      ### 嵌入式软件编程技术--OSEK/VDX汽车电子原版英文版 #### 知识点一:OSEK/VDX简介 - **OSEK**(Open System and Embedded software for the Kernel)和**VDX**(Virtual Data eXchange)是面向汽车行业的标准化...

      OSEK/VDK 2.5.3

      OSEK/VDX是一个开放式的汽车电子实时操作系统标准,OSEK/VDK则是OSEK/VDX标准的实现。OSEK/VDK 2.5.3版本是OSEK网络管理概念和应用编程接口的具体实现,它在汽车电子领域中,主要负责网络中各个电子控制单元(ECU)的...

      Programming in the OSEK-VDX Environment

      1. **编程基础**:介绍了OSEK/VDX的基本概念和原理,为初学者提供了一个清晰的入门指南。 2. **系统架构**:详细描述了OSEK/VDX系统的整体架构,包括各个组件之间的交互关系。 3. **任务管理**:讨论了OSEK OS中的...

      AUTOSAR简介,OSEK/VDX简介

      AUTOSAR简介,OSEK/VDX简介 AUTOSAR是一种汽车电子软件规范,它的前身是OSEK/VDX规范。了解AUTOSAR之前,需要了解OSEK/VDX的历史和发展。 OSEK/VDX规范的提出是由于汽车工业的飞速发展,汽车对降低能耗、提高安全...

      OSEK/VDX 标准合集

      OSEK标准的具体手册 有OSEK-COM OSEK-OIL OSEK-NM OSEK-OS OSEK-ORTI

      OSEK_VDX_Binding_Specification_V1.1_2000.pdf

      OSEK/VDX Binding Specification是汽车行业的联合项目,旨在为车辆中的分布式控制单元制定一个开放架构的行业标准。这个标准包括了一个实时操作系统、通信软件接口和网络管理功能的规范。OSEK代表“Offene Systeme ...

      OSEK_VDX_Communication(COM)_V3.0.3_2004.pdf

      OSEK/VDX Communication,即OSEK通信规范,是汽车电子行业中一个重要的标准,它定义了汽车嵌入式系统中的任务间通信协议。这个规范在版本3.0.3中详细阐述,旨在促进不同厂商之间的互操作性,确保软件组件在不同硬件...

      OSEK网络管理规范(2.5.3)

      两者的名字都反映出OSEK/VDX的目的是为汽车电子制定标准化接口。该标准完全独立,对目标系统只限制了少量的条件。这样,就可以应用一些简单的处理器替代那些昂贵的解决方案,来控制任务执行,并不需要任何附加条件。...

      OSEK/VDX Network Management V2.5.2

      OSEK/VDX Network Management(简称OsekNm)是针对汽车电子系统的一种网络管理软件标准,主要用于实现汽车内部各种ECU(电子控制单元)之间的通信协调。V2.5.2是该标准的一个版本,它提供了更加稳定和优化的网络管理...

    Global site tag (gtag.js) - Google Analytics