优先级反序算法在汽车电子控制平台设计中的应用
2009-07-14
作者:冷 静1,耿剑锋1,宋雪桦1,
摘 要: 为了实现汽车应用软件在不同开发平台上的无缝连接,将μC/OS-II操作系统移植到飞思卡尔芯片MC9S12DP256B微控制器上,构建了一个开放的微控制器硬件控制平台;同时与汽车业界提出的OSEK/VDX标准相匹配,采用优先级反序算法设计了基于μC/OS-II微内核结构的汽车专用嵌入式操作系统。通过测试表明,系统为应用程序提供了稳定的运行平台,优化了汽车控制性能。
关键词: μC/OS-II微内核;OSEK/VDX标准;优先级;嵌入式
随着科技的进步,人们对汽车的性能指标要求越来越高,由此汽车电子化程度也在不断提高,使得当代汽车电控单元从硬件到软件变得更加复杂,迫切需要汽车嵌入式操作系统开发平台协助完成各种电控单元的设计及开发。μC/OS-II微内核代码简洁,实时性和专用性强,作为汽车专用嵌入式操作系统的微内核,移植到芯片MC9S12DP256B[1]微控制器上,构建一个开放的汽车电子微控制器硬件控制平台, 在此硬件基础上通过优先级反序算法设计符合汽车业界OSEK/VDX规范标准的汽车电子嵌入式操作系统,使得该操作系统在可移植性、可靠性以及扩展性方面有很大的提高。
本文针对μC/OS-II[2]微内核设计符合OSEK/VDX标准的汽车电子嵌入式操作系统,并进行了功能测试,系统运行稳定。
1 OSEK/VDX规范的研究
为了屏蔽不同电控单元(ECU)的接口特性,减少开发费用和时间,实现软件的可移植性、可扩展性而提出的OSEK/VDX开放式系统及接口规范[3],主要包括4部分:(1)操作系统(OS)规范,该规范定义操作系统内核的实现机制和应用编程接口(API);(2)通信(COM)规范。实现各个电控单元间和某个电控单元内的数据信息交换,即外部与内部通信;(3)网络管理(NM)规范。电控单元通过串行数据通信链连接成网络,网络管理规范为保证通信网的安全性与可靠性,提供了确保网络功能的接口函数;(4)实现语言(OIL)。根据应用软件的实际需要配置操作系统及通信机制,以缩减最终生成可执行文件的体积。操作系统、通信管理和网络管理是3个可以独立存在的模块,三者之间关系如图1所示。
OSEK OS是针对汽车应用特点而专门制定的一个小型RTOS规范,具有以下特点:
(1)可移植性,所有API都是标准化的并且在功能上都有明确的定义。
(2)可扩展性,OSEK OS要求通用于各种类型的ECU,因此一方面系统要高度地模块化, 同时能进行灵活的配置。
(3)汽车应用需要的可靠性、实用性等。由于采用微内核结构,其微内核部分代码数量小, 各个部分之间关系不是很复杂, 可以保证代码的正确性。当增加操作系统功能时, 只需在核外调试和运行, 不会危及到微核, 整个系统的安全系数也比较高。
2 符合OSEK/VDX规范的优先级反序算法
OSEK OS与μC/OS-II内核在优先级顺序上采取不同使用方法。在μC/OS-II内核的64个优先级中,数字越小表明级别越高。而OSEK标准相反,要求数字越大级别越高。为了实现符合OSEK汽车电子国际标准的汽车嵌入式系统,本文针对μC/OS-II内核,设计了符合OSEK OS标准中关于优先级的要求。
运行最高优先级任务的实现步骤[4]:首先使已经创建的任务进入就绪表,然后查询就绪表中优先级最高的任务,最后通过调度函数运行该最高优先级任务。在μC/OS-II操作系统中,定义了2个数组OSMapTbl[ ]和OSUnMapTbl[ ]以及1张就绪表。就绪表中有2个变量:OSRdyTbl[ ]和OSRdyGrp。在OSRdyGrp中,任务按优先级分组,由于μC/OS-II操作系统的优先级定义为64级,所以8个任务定为一组。OSRdyGrp中的每一位表示8组任务中每一组是否有进入就绪态的任务。任务进入就绪态时,OSRdyTbl[ ]中的相应元素的相应位置为1。OSRdyGrp和OSRdyTbl[ ]之间的关系为:当OSRdyTbl[i](0≤i≤7)中的任何1位是1时,OSRdyGrp的第i位置1。任务优先级prio的低3位确定任务在就绪表OSRdyTbl[ ]中的位置,紧接着的3位表示任务占据OSRdyGrp的第几位。
在μC/OS-II中,使任务进入就绪态的方法是:
OSRdyGrp|=OSMapTbl[prio>>3];
OSRdyTbl[prio>>3]|=OSMapTbl[prio&0 x 07]
其中,(prio>>3)表示优先级在变量OSRdyGrp中的位置;(prio&0x07)表示优先级在变量OSRdyTbl[ ]中的位置。|=表示将OSMapTbl[ ]的值与OSRdyGrp按位“或”,该方法中,第1句的含义是使就绪表变量OSRdyGrp置位, 第2句则使就绪表变量OSRdyTbl[ ]置位。
任务进入就绪态以后,操作系统根据应用程序,通过调度函数调用已经就绪的任务。由于CPU的使用权只能被一个任务占有,此时需要找出就绪表中优先级最高的任务投入运行,这一过程由如下代码表示:
y=OSUnMapTbl[OSRdyGrp];
x=OSUnMapTbl[OSRdyTbl[y]];
prio=(y<<3)+x;
OSUnMapTbl[ ]表用来查找已经就绪的优先级最高的任务。利用此表,可以不用遍历所有就绪的任务而直接找到就绪了的最高优先级任务,节省系统调度时间,提高CPU利用率,增强内核实时性。在该代码段中,第1句表示找出就绪任务中最高优先级所处变量OSRdyGrp中的位置码y, 第2句则找出了该优先级在变量OSRdyTbl[ ]中的位置码x,第3句根据y与x求出就绪表中任务的最高优先级。
当任务运行完毕(即任务进入挂起、等待状态时)或者任务被删除,需要将任务从就绪表中删除。具体实现方法:
if((OSRdyTbl[prio>>3]&~OSMapTbl[prio&0x07])==0)
OSRdyGrp &=~OSMapTbl[prio>>3]
针对以上μC/OS-II操作系统对优先级使用的描述,本文提出了一种将优先级反序的方法,用来与OSEK/VDX的操作系统规范相对应。
首先,将就绪表中的内容反序,OSMapTbl[ ]的值保持不变,结果如图2所示。
同时把任务进入就绪态的方法修改为:
OSRdyGrp|=OSMapTbl[(~prio)&0 x 3 F>>3];
OSRdyTbl[(OSMapTbl)>>3]|=OSMapTbl[((~prio)&0 x 3 F)& 0 x 07];
其次,在OSUnMapTbl[ ]的值维持原状的基础上,把找出就绪态中优先级最高任务的方法做如下改动:
y=OSUnMapTbl[OSRdyGrp];
x=OSUnMapTbl[OSRdy[y]];
prio=((7-y)<<3)+x;
最后,任务退出就绪状态所用的方法也需要改变:
if((OSRdyTbl[((~prio)&0 x 3 F)>>3]&=~OSMapTbl[((~prio)& 0 x 3 F)& 0 x 0 7])==0)
OSRdyGrp&=~OSMapTbl[((~prio)& 0 x 3 F)>>3]
3 测试
为了验证系统的可靠性,使用以MC9S12DP256B芯片为主的电控单元开发板、背景调试模式的BDM调试器[5]和示波器对上面算法的修改做了测试,利用Codewarrior编译器将操作系统下载到开发板上。测试实验环境如图3所示。
3.1 测试方案
首先在主函数中创建一个优先级为60的MainTask任务,然后调用OSStart()函数使操作系统开始运行。在MainTask里,先对时钟进行初始化,并创建2个优先级分别为55和50的任务Taska和Taskb,在Taska中设置PORTB_BIT0=1、PORTB_BIT0=0,并持续50万个计数值。Taskb中设置PORTB_BIT1=1。在MainTask任务循环里,先设置PORTB_BIT2=1,再通过OSTimeGet()函数为自己设置计数器,当计数器达到预定值时,将自己挂起。
3.2 测试结果
通过观察开发板上相对于PORTB口的指示灯,发现2灯(对应PORTB_BIT2位)先灭(开发板上端口置1表示灯灭,因为锁存处于一直灭掉状态),之后0灯(对应PORTB_BIT0位)灭亮交替,而1灯(对应PORTB_BIT1位)一直没有变化(没有执行到该任务,优先级最低)。测试结果如图4所示。图中示波器1通道表示Taska对应的输出口PORTB_BIT0,保持高电平的2μs是执行PORTB_BIT0=1这一语句所用的时间,保持低电平的3.6 μs是执行持续50万个计数值得PORTB_BIT0=0语句;示波器2通道表示MainTask对应的输出口PORTB_BIT2。测试结果的波形显示与端口灯的显示情况完全符合,说明优先级反序算法是正确的。
本文实现了优先级符合OSEK/VDX标准的汽车电子嵌入式操作系统设计,实际测试表明,该系统运行稳定,能够为应用程序提供良好的运行环境,适应于要求反应可靠的汽车控制系统,具有良好的应用前景。
参考文献
[1] 杨国田,白焰.Motorola 68HC12系列微控制器原理、应用与开发技术[M].北京:中国电力出版社,2003.
[2] LABROSSE J J.嵌入式实时操作系统μC/OS-Ⅱ(第2版)[M].邵贝贝,译.北京:北京航空航天大学出版社,2003.
[3] 国际标准化组织汽车委员会.OSEK/VDX specifications.ISO 17356-2-2005,汽车电子开放式系统及接口规范[S].2005.
[4] 任哲. 嵌入式实时操作系统μC/OS-II原理及应用[M]. 北京:北京航空航天大学出版社,2005.
[5] 姚冉中,潘宏侠. μC/OS-II在TMS320F2812上的移植和研究[J].计算机工程与设计,2007,140(2):162-163.