论文摘要:实时操作系统(rtos)是复杂控制系统中必不可少的一部分,它能按照任务的优先级实现多任务调度,通过信号量、事件标志来实现任务的同步,消息队列和邮箱机制来实现任务之间的通讯,中断机制来实现突发事件的管理。较传统的前后台系统,它具有更高的实时性、稳定性。介绍了当前在国际汽车 工业 界日益占据主导地位的汽车电子开放式平台系统(osek/vdx)规范。介绍了nec汽车电子专用实时操作系统rx850,列举了其他rtos并分析了其优缺点,建立了基于rx850的rtos软件开发平台,实现了汽车发动机控制模块任务的调度,并对rtos的多任务进行了软仿,这对于复杂软件系统开发是非常有实际意义的。
引言
随着国内汽车电子产业的不断升级和研发投入不断加大,国内生产的汽车电子简单的ecu已经越来越普及,例如车载音响,仪表,车身控制bcm,动力转向eps等等。越来越多的 企业 将精力投入到比较复杂的控制领域,比如发动机控制,防抱死系统(abs)等,对于这些逻辑复杂、实时性和安全性高的控制任务,传统的前后台系统模式非实时处理的弊端越来越呈现,这就势必需要用到实时操作系统来管理这些任务。
osek标准是1993年德国汽车工业界联合推出了“汽车电子的开放式系统及接口软件规范”,即osek(opensystemandthecorrespondinginterfacesforautomotiveelectronics)。1994年法国汽车工业界的相似规范vdx(vehicledistributedexecutive)和osek规范合并,从而形成osek/vdx规范体系。当前osek标准已经成为汽车电子软件开发领域中的通用标准,旨在增强软件代码安全性、移植性,减少软件开发周期。
目前,市场上通用的开源rtos有很多,比如μc/os-ⅱ,freertos,linux-2.6等,但是这些核多半是用于通用领域或者安全性要求不太高的领域,如果将这些移植到汽车电子动力安全控制领域,是不太合时宜的;而且,这些核本身不是基于osek标准,如果引入osek标准,无疑加大了内核移植的难度。nec电子的实时操作系统rx850是一款基于osek标准的汽车级专用rtos,其内核的实时性已经得到第三方的专业测试。它已经被移植到了nec芯片的集成开发环境pmplus和greenhills,客户只需要在ide(integrateddevelopenvironment)中编写脚本文件来配置rtos即可通过编译,使得客户从底层驱动编写到rtos任务调度轻松实现“无缝结合”,大大缩短了rtos移植的开发周期。本文建立了基于nec电子32位车身专用芯片v850/fx3的软件平台,并介绍了如何实现rx850操作系统的配置,以发动机控制模块为控制模型来实现多任务的实时调度,最后通过软仿工具来分析该内核的效率和任务调度的实时性。
1系统平台介绍
本系统采用nec电子的32位车身专用芯片v850/fx3系列,v850是nec电子的32位微处理器核,5级流水线控制,内部32个32位寄存器,乘法/除法指令,数据空间支持最大4gb线性寻址能力,代码空间支持64m线性寻址能力,内部1mb的codeflash,60kb的ram空间,32kb的dataflash用作eeprom模拟。
基于osek标准的rx850实时操作系统符合以下标准:操作系统规范(osekos)、通信规范(osekcom)、 网络 管理规范(oseknm)和osek实现语言(osekoil)。其中osekos是针对汽车应用特点而专门制定的一个小型rtos规范,着重以下几个方面:(1)可移植性,所有api都是标准化的并且在功能上都有明确的定义;(2)可扩展性,osekos旨在通用于任何类型的ecu,因此一方面系统要高度的模块化,另一方面又要能进行灵活的配置;(3)汽车应用的特定需求,诸如可靠性、实用性和代价敏感性等。相应的,osekos静态配置可以通过os2ekoil语言实现,用户在系统生成时静态制定任务的个数、需要的资源和系统服务。osekcom为通信网络中的数据交换提供了标准的接口和协议。oseknm为监视网络的流量提供了一组标准的功能函数,以保证网络的安全性和可靠性。
2rx850内核配置
由于rx850已经被嵌入到ide,因此用户直接编写内核脚本文件即可,下面介绍如何来配置内核。
1.系统时钟设置
clkhdrinttm0eq0//选定timerm为时间片中断源
2.堆栈设置
rx850的堆栈分为系统堆栈和任务堆栈,
pool0功能:系统基本表信息、准备队列、每个管理块、任务堆栈、中断句柄堆栈(系统堆栈)、可变长度内存、不变长度内存。
pool1功能:任务堆栈、中断句柄堆栈(系统堆栈)、可变长度内存、不变长度内存。
pool0和pool1都可以作为任务堆栈,即使没有pool1也可以。配置如下:
intstk0x400:pool0//系统堆栈大小为0x400
tsktsk1_tsk10x050:pool10x06tts_dmt0x00ei//tsk_id_1ms任务堆栈大小0x50
3.允许最大优先级任务数
maxpri0x1f//允许最大优先级任务数为0x1f
4.信号量设置
semsem_task10x00//设置了信号量sem_task1为0
semsem_task20x00//设置了信号量sem_task2为0
5.事件标志设置
flgflg_task1//设置了事件标志flg_task1
flgflg_task2//设置了事件标志flg_task2
5.邮箱设置
mbxid_task1ta_mpri//设置task1的邮箱
mbxid_task2ta_mpri//设置task2的邮箱
6.中断设置
rx850的中断分为直接中断和间接中断两种,直接中断不受rx850制约的中断句柄,理论上接近硬件中断的速度,其缺点是需要用户自己写中断处理句柄,包括:(1).寄存器压栈;(2).换向,跳转到中断句柄的开始;(3).调用系统命令;(4).返回到调度;间接中断的中断句柄在rx850的中断预处理后才被启动,优点是简化了句柄处理过程,缺点是由于rx850的预处理降低了速度,其处理过程如下:
图1直接中断调度图
间接中断配置如下:
inthdrintad_ad_interrupt//ad间接中断句柄配置
inthdrintc1rec_can_ch1rxint//can间接中断句柄配置
图2间接中断调度图
7.固定/可变内存池设置
当系统需要交换较大的数据时,此时任务堆栈是不够用的,需要开辟一段内存来使用。rx850支持两种方式的内存配置,固定内存池和可变内存池。固定内存池由用户自定义内存池的大小,可变内存池根据实际应用系统动态的定义所需内存大小,配置如下:
//固定内存以0x08字节为单位排列,大小为50*0x08;
mplmpl_id_task10x08:pool1
//可变内存0x08字节为单位排列
8.系统周期循环中断设置
cyccyc_int_timer_cyc_inttimertcy_off10
//系统周期循环中断时间为10个时间片
以上完成了操作系统的配置,然后通过nec的ide即可生成操作系统的.s和.h文件,将此两个文件包含在工程文件中即可。
3rx850软仿及结论
通过以上配置,选择发动机控制模块为对象,下面对rx850进行软仿。nec 电子 提供专门的软仿工具az,在ide中打开az,运行程序后可以看到如下:
图3任务调度仿真图
图4任务对cpu的占用率
也可以通过rd850来实时检测各任务的状态如下:
图5任务运行状态
通过上图可以很方便的看到每个任务的实时调度情况和cpu内核的使用效率。目前cpu的空闲率为94%,很多任务实际上没有被调用,用户可以根据实际情况将更多的功能模块放在api任务中来运行。软仿只能提供模拟的仿真,如果用户需要更精确的trace工具,则需要用硬仿来实现。
4结束语
对于比较复杂的控制系统,rtos是必不可少的,建立以上开发平台,使得系统工程师可以专注于系统功能建模仿真,然后将功能函数与该平台的api任务调度结合,即可完成片上测试。实践证明,这种开发模式大大提高了整个项目的进度。
中国论文网(www.lunwen.net.cn)免费学术期刊论文发表,目录,论文查重入口,本科毕业论文怎么写,职称论文范文,论文摘要,论文文献资料,毕业论文格式,论文检测降重服务。