随着汽车工业的飞速发展,电子技术在汽车上的应用比重不断增加。为了满足日益复杂的汽车电子控制软件的开发需要,实现应用软件的可移植性和不同厂商的控制模块间的可兼容性,1993年德国汽车工业界联合推出了“汽车电子的开放式系统及接口软件规范”,即OSEK(open system and the corresponding interfaces for automoTIve electronics)。1994年法国汽车工业界的相似规范VDX(vehicle distributed execuTIve)和OSEK规范合并,从而形成OSEK/VDX规范体系。
此规范主要由4部分组成: *** 作系统规范(OSEKOS)、通信规范(OSEKCOM)、网络管理规范(OSEKNM)和OSEK实现语言(OSEKOIL)。其中OSEKOS是针对汽车应用特点而专门制定的一个小型RTOS规范,着重以下几个方面:
①可移植性,所有API都是标准化的并且在功能上都有明确的定义;
②可扩展性,OSEKOS旨在通用于任何类型的 ECU,因此一方面系统要高度的模块化,另一方面又要能进行灵活的配置;
③汽车应用的特定需求,诸如可靠性、实用性和代价敏感性等。相应的,OSEKOS 静态配置可以通过OS2EKOIL语言实现,用户在系统生成时静态制定任务的个数、需要的资源和系统服务。OSEKCOM为通信网络中的数据交换提供了标准的接口和协议。OSEKNM为监视网络的流量提供了一组标准的功能函数,以保证网络的安全性和可靠性。
μ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-Ⅱ系统服务的执行时间不依赖于应用程序任务的多少;
⑧实用性和可靠性。许多的行业都有成功应用该实时内核的实例,这些应用的实践是该内核实用性和可靠性的最好证据。
OSEKOS结构特点及运行机制
OSEKOS的结构特点
(1)高实时性。由于在汽车控制领域,如果出现丝毫的差错会导致危及生命安全的严重后果,因此要求具有高度的实时性。OSEKOS所有的系统对象由用户在建立时静态创建,避免了动态创建时的时间消耗,增强了其实时性。而且通过占先式的调度策略和警报机制也能满足实时性需求;
(2)标准化应用接口。其制定了标准的应用程序编程接口,这样可以屏蔽底层硬件结构的不同而提供一个一致的开发环境。并且用户只需修改OIL配置文件中与硬件相关的部分,可以方便地在不同的ECU上进行移植;
(3)可裁剪性。其具有高度模块化和可灵活配置的特性,用OIL语言进行裁剪,可以在很少的硬件资源环境下运行。
OSEKOS运行机制分析
任务管理
OSEK规范将任务分为基本任务和扩展任务。基本任务具有3种状态:运行状态、就绪状态和挂起状态。扩展任务多了一个等待状态。此外基本任务只在开始和结束时才有同步点,所以其需要的资源少,而扩展任务可以对应不同的时间,在运行中可能有多个同步点,所以对环境要求高。 *** 作系统的任务之间的同步通过调度程序来实现。
OSEK规范支持3种调度方式:
①完全抢占式调度。该策略用于保存现场的内存开销较大,理论上可以在任务的任何位置重调度,因此任务必须同步访问共享资源,增加了系统的复杂性;
②非抢占调度。此策略通过调用某些服务例程实现任务切换,即用户设置重调度点。通过定义任务组,可以使多个任务同时具有抢占或非抢占调度的特征;
③混合抢占调度。抢占任务和非抢占任务共存于一个系统时,使用“混合抢占”调度策略。在这种情况下,调度策略依赖于正在运行任务的抢占特性,开发者通过配置任务优先级和抢占属性来定义任务执行顺序。
一致类
为了更加灵活的配置 *** 作系统调度,OSEK规范定义了4种一致类:BCC1、BCC2、ECC1和ECC2。其根据每个优先级可能有的任务个数,需要的是基本任务还是扩展任务来进行划分。若每个优先级上只有一个任务,且是基本任务则定义一致类为BCC1,是扩展任务则定义为BCC2;若每个优先级上可以有多个任务,且是基本任务则定义一致类为ECC1,是扩展任务则定义为ECC2。
中断处理
OSEK规范定义了2种中断服务程序:①ISR1。此类中断程序不使用 *** 作系统的资源,中断结束后,处理程序从产生中断的地方继续执行。其对任务的管理没有影响,不要求调用 *** 作系统的API。②ISR2。此类中断程序是系统生成时,通过用户子程序配置而成,它可以调用 *** 作系统的API。中断的优先级高于任务,因此可以抢占任何任务。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)