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信息
返回的错误值
StatusType GetTaskState(TaskType<TaskID>Z, TaskStateRefType<State>)
获取当前正在运行的任务的状态信息
返回的错误值
中断:
分类:
按照功能将中断处理程序分为两类
- 第1类ISR: 不使用系统服务函数
- 第2类ISR: 使用系统服务函数
V2.1规范中规定了第3类ISR,V2.2规范中已将其删除
在第2类ISR中,允许使用除下列之外的所有系统服务函数
- 引起等待状态(WaitEvent)
- 仅对任务起作用的,如:
-
- TerminateTask()
- ChainTask()
- Schedule()
- 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直接网络管理软件的开发是现代汽车行业中不可 thiếu的一部分。随着汽车电子控制单元(ECU)的增加,车辆中的网络互联变得越来越复杂,为了保证网络的安全和可靠性,网络...
### 关于OSEK/VDX的深度解析 #### 引言 随着汽车工业的迅猛发展,汽车电子系统在整车中的重要性与日俱增。从发动机控制到车身电子,从安全系统到信息娱乐,电子控制单元(ECU)的集成度和复杂度不断提高。然而,...
《OSEK/VDX汽车电子嵌入式软件编程技术》一书附带的光盘包含了丰富的资源,旨在帮助读者深入理解和应用OSEK/VDX标准于汽车电子领域的嵌入式软件开发。OSEK(Open System for Embedded Automotive Engineering)和VDX...
汽车电子行业专业技术文档,OSEK/VDX的Specification的所有资料文档,英文 OSEK,是指德国的汽车电子类开放系统和对应接口标准(open systems and the corresponding interfaces for automotive electronics),...
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这本书中的源代码,国内已经有翻译的版本出版。这本书重点讲解了OSEK/VDX的前三个部分。本资源包doc目录包含了编写该代码的是的OSEK/VDX标准,最新的标准在本人上传的另外一...
OSEK/VDX标准是为汽车电子领域设计的一套操作系统规范,旨在促进软件的互操作性和可移植性。Trampoline操作系统是基于这一标准的一种开源实现,由法国通信研究所(IRCCyN)的实时系统组开发。它兼容OSEK/VDX OS 2.2.3...
OSEK/VDX标准是汽车电子领域广泛应用的一套操作系统和通信规范,主要为车载嵌入式系统提供标准化的软件架构。这些标准旨在提高软件的可移植性、可靠性和可维护性,降低开发成本,增强不同组件间的互操作性。下面我们...
5. **OSEK/VDX书籍**:由于是市面上唯一一本关于OSEK的书,它可能包含了OSEK/VDX标准的深入解析,包括基本概念、API使用、网络管理策略、任务调度算法、中断处理、错误处理机制等。此外,书籍可能还涵盖了一些实际...
OSEK/VDX汽车电子嵌入式软件编程 光盤資料
### 嵌入式软件编程技术--OSEK/VDX汽车电子原版英文版 #### 知识点一:OSEK/VDX简介 - **OSEK**(Open System and Embedded software for the Kernel)和**VDX**(Virtual Data eXchange)是面向汽车行业的标准化...
OSEK/VDX是一个开放式的汽车电子实时操作系统标准,OSEK/VDK则是OSEK/VDX标准的实现。OSEK/VDK 2.5.3版本是OSEK网络管理概念和应用编程接口的具体实现,它在汽车电子领域中,主要负责网络中各个电子控制单元(ECU)的...
1. **编程基础**:介绍了OSEK/VDX的基本概念和原理,为初学者提供了一个清晰的入门指南。 2. **系统架构**:详细描述了OSEK/VDX系统的整体架构,包括各个组件之间的交互关系。 3. **任务管理**:讨论了OSEK OS中的...
AUTOSAR简介,OSEK/VDX简介 AUTOSAR是一种汽车电子软件规范,它的前身是OSEK/VDX规范。了解AUTOSAR之前,需要了解OSEK/VDX的历史和发展。 OSEK/VDX规范的提出是由于汽车工业的飞速发展,汽车对降低能耗、提高安全...
OSEK标准的具体手册 有OSEK-COM OSEK-OIL OSEK-NM OSEK-OS OSEK-ORTI
OSEK/VDX Binding Specification是汽车行业的联合项目,旨在为车辆中的分布式控制单元制定一个开放架构的行业标准。这个标准包括了一个实时操作系统、通信软件接口和网络管理功能的规范。OSEK代表“Offene Systeme ...
OSEK/VDX Communication,即OSEK通信规范,是汽车电子行业中一个重要的标准,它定义了汽车嵌入式系统中的任务间通信协议。这个规范在版本3.0.3中详细阐述,旨在促进不同厂商之间的互操作性,确保软件组件在不同硬件...
两者的名字都反映出OSEK/VDX的目的是为汽车电子制定标准化接口。该标准完全独立,对目标系统只限制了少量的条件。这样,就可以应用一些简单的处理器替代那些昂贵的解决方案,来控制任务执行,并不需要任何附加条件。...
OSEK/VDX Network Management(简称OsekNm)是针对汽车电子系统的一种网络管理软件标准,主要用于实现汽车内部各种ECU(电子控制单元)之间的通信协调。V2.5.2是该标准的一个版本,它提供了更加稳定和优化的网络管理...