|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
引言
4 x- L7 z1 `& H
, R `0 j% U1 i随着汽车工业的飞速发展,电子技术在汽车上的应用比重不断增加。为了满足日益复杂的汽车电子控制软件的开发需要,实现应用软件的可移植性和不同厂商的控制模块间的可兼容性,1993年德国汽车工业界联合推出了“汽车电子的开放式系统及接口软件规范”,即OSEK(open system and the corresponding inteRFaces for automotive electronics)。1994年法国汽车工业界的相似规范VDX(vehicle distributed executive)和OSEK规范合并,从而形成OSEK/VDX规范体系。/ z- g4 o! @2 z2 I6 W! L
, ? g; U s/ p' q' |
此规范主要由4部分组成:操作系统规范(OSEKOS)、通信规范(OSEKCOM)、网络管理规范(OSEKNM)和OSEK实现语言(OSEKOIL)。其中OSEKOS是针对汽车应用特点而专门制定的一个小型RTOS规范,着重以下几个方面:①可移植性,所有API都是标准化的并且在功能上都有明确的定义;②可扩展性,OSEKOS旨在通用于任何类型的 ECU,因此一方面系统要高度的模块化,另一方面又要能进行灵活的配置;③汽车应用的特定需求,诸如可靠性、实用性和代价敏感性等。相应的,OSEKOS 静态配置可以通过OS2EKOIL语言实现,用户在系统生成时静态制定任务的个数、需要的资源和系统服务。OSEKCOM为通信网络中的数据交换提供了标准的接口和协议。OSEKNM为监视网络的流量提供了一组标准的功能函数,以保证网络的安全性和可靠性。
/ A6 R" T, o+ i: A c- ?- ?) ?, E) V! y0 o' k# q2 J& [& F
μC/OS-Ⅱ是一个著名的源代码公开的实时内核,专门为嵌入式应用设计的。它的主要性能特点如下:①源代码公开。这样很容易就能把操作系统移植到各个不同的硬件平台上;②可移植性。μC/OS-Ⅱ绝大部分源代码是用C语言写的,而与微处理器硬件相关的那部分是用汇编语言写的,使得μC/OS-Ⅱ便于移植到其他的微处理器上;③可固化。只要开发者有固化手段,μC/OS-Ⅱ可以嵌入到开发者的系统中;④可裁剪性(Scalable)。开发者可以有选择的使用μC/OS-Ⅱ中应用程序需要的那些系统服务,可以减少μC/OS-Ⅱ所需的存储空间;⑤占先(Preemp2tive)。μC/OS-Ⅱ完全是占先式的实时内核;⑥多任务(Multi-Tasking)。μC/OS-Ⅱ可以管理64个任务,但是目前应用程序最多有56个任务;⑦可确定性 (Affirmable)。μC/OS-Ⅱ系统服务的执行时间不依赖于应用程序任务的多少;⑧实用性和可靠性。许多的行业都有成功应用该实时内核的实例,这些应用的实践是该内核实用性和可靠性的最好证据。
) z- C7 Z2 s8 E) A& N( ?) W9 g+ y1 k1 H$ z* f' F: r) c& z" `
OSEKOS结构特点及运行机制1 `/ Y) q$ h( ]2 p8 r$ Y% I
OSEKOS的结构特点, j" N6 o; o4 b8 ]
% s- @* D; C; t3 Q3 n+ N5 e(1)高实时性。由于在汽车控制领域,如果出现丝毫的差错会导致危及生命安全的严重后果,因此要求具有高度的实时性。OSEKOS所有的系统对象由用户在建立时静态创建,避免了动态创建时的时间消耗,增强了其实时性。而且通过占先式的调度策略和警报机制也能满足实时性需求;
& n0 {1 ~. V* `8 @3 k, m# \; }(2)标准化应用接口。其制定了标准的应用程序编程接口,这样可以屏蔽底层硬件结构的不同而提供一个一致的开发环境。并且用户只需修改OIL配置文件中与硬件相关的部分,可以方便地在不同的ECU上进行移植;
: c) U8 M* @- [% M(3)可裁剪性。其具有高度模块化和可灵活配置的特性,用OIL语言进行裁剪,可以在很少的硬件资源环境下运行。$ Z5 K, }1 L; @$ U$ j. R) l
OSEKOS运行机制分析/ i+ }( i1 }# y
任务管理% D' k4 t" a' q5 R; U
' H: ?8 g8 }) \& q% s* K4 ]4 Z' c* OOSEK规范将任务分为基本任务和扩展任务。基本任务具有3种状态:运行状态、就绪状态和挂起状态。扩展任务多了一个等待状态。此外基本任务只在开始和结束时才有同步点,所以其需要的资源少,而扩展任务可以对应不同的时间,在运行中可能有多个同步点,所以对环境要求高。操作系统的任务之间的同步通过调度程序来实现。OSEK规范支持3种调度方式:①完全抢占式调度。该策略用于保存现场的内存开销较大,理论上可以在任务的任何位置重调度,因此任务必须同步访问共享资源,增加了系统的复杂性;②非抢占调度。此策略通过调用某些服务例程实现任务切换,即用户设置重调度点。通过定义任务组,可以使多个任务同时具有抢占或非抢占调度的特征;③混合抢占调度。抢占任务和非抢占任务共存于一个系统时,使用“混合抢占”调度策略。在这种情况下,调度策略依赖于正在运行任务的抢占特性,开发者通过配置任务优先级和抢占属性来定义任务执行顺序。& |. ~* p# d: {0 H; c! V% Q5 K
一致类$ i# Q \$ ?/ F% q2 x0 ]
; U5 V) t$ G9 a# {0 ?& U为了更加灵活的配置操作系统调度,OSEK规范定义了4种一致类:BCC1、BCC2、ECC1和ECC2。其根据每个优先级可能有的任务个数,需要的是基本任务还是扩展任务来进行划分。若每个优先级上只有一个任务,且是基本任务则定义一致类为BCC1,是扩展任务则定义为BCC2;若每个优先级上可以有多个任务,且是基本任务则定义一致类为ECC1,是扩展任务则定义为ECC2。6 I$ z4 q3 v' Y
中断处理% {: @0 p* \1 ?, o( |
0 W7 M9 }. J1 M1 u; f
OSEK规范定义了2种中断服务程序:①ISR1。此类中断程序不使用操作系统的资源,中断结束后,处理程序从产生中断的地方继续执行。其对任务的管理没有影响,不要求调用操作系统的API。②ISR2。此类中断程序是系统生成时,通过用户子程序配置而成,它可以调用操作系统的API。中断的优先级高于任务,因此可以抢占任何任务。
4 f( d5 G5 M& W2 ^5 h) G事件机制( F& y, n8 D. z b) F+ S5 Y/ t: h) Z+ A
. R8 s/ A- A9 ~* \. y1 M
事件机制用于保证不同扩展任务之间的同步。该机制含义是,一个处于等待状态的扩展进程,只有当它所等待的事件至少有一个发生,才能进入就绪态,并且事件的发生会以信号的方式传给该进程。只有扩展任务,才具有事件。
' E, g; Y- H" @$ q! L+ ?8 \7 P E6 c# Q资源管理( D( ^. t# H. z6 G3 j
' D$ U+ X- ?0 p+ t( E/ R
具有不同优先级的多任务访问共享资源需要使用资源管理机制进行协调。这些资源可以是一段临界区代码、调度程序、共享内存或是数据结构,也可以是共享硬件设备。系统在处理多个进程对共享资源的互斥访问时,采用信号量对临界区数据或资源加锁,但是这样可能会导致优先级反转。为了避免这种情况出现,OSEK采用了优先级最高限度协议(PCP),即当一个进程占用了一个资源后,该进程的优先级会临时升高为该资源优先级。当该任务释放了资源后,其优先级回到要求访问资源前的优先级。使用该协议同时也解决了死锁的问题。6 s* _# {: M9 W) ?( [' d" h0 F# M
报警器
( w- W/ i! l" \4 w: S, z; |7 {# Q/ R2 x
报警器是OSEK为处理循环事件提供的服务机制,警报或者基于系统时钟,或者基于其他的某种计数器。当计数器到达警报设置值时被触发,此时可以激活进程也可以为某进程设置事件,或者执行一个警报回调程序。
$ `0 G9 Y' z, ]+ I: b消息处理
, S4 E0 A& e/ s$ p* i& o
: @7 S- O, |: C0 Q/ D( W7 Z/ ^1 A任务之间是通过消息实现通信的,消息是应用数据的容器,只有一个发送者,但是可以有多个接受者。OSEK规范将消息分为可排队和不可排队的。前者是静态长度消息,内部数据被组织成FIFO队列,能被接受服务例程移走;不可排队消息是不断被刷新的消息,不能被服务例程移走。
+ b5 @) h& o" M% c3 D& M2 q2 ^) }错误处理' ?% k8 t( S; \2 x" v
0 t& j" m/ ~/ E1 r- q
OSEKOS提供了系统专用的钩子程序,以便在操作系统内部操作时执行用户定义的函数。钩子程序可用于:系统启动,相应钩子程序在操作系统启动后,进入调度程序之前执行;系统关闭,相应钩子程序在应用或操作系统(此时发生严重错误)请求系统停止运行时执行;跟踪、调试应用以及现场切换时调用用户定义的扩展程序;错误处理。
5 F# q4 Q; Q s0 z, t |
|