嵌入式OSEK配置器的设计与实现

发布者:未来架构师最新更新时间:2012-11-14 来源: 21IC 关键字:OSEK  配置器  网络管理 手机看文章 扫描二维码
随时随地手机看文章

随着汽车工业的快速发展,汽车对控制、通信、网络管理等方面的要求越来越高,基于32位微控制器的硬件平台、基于嵌入式实时操作系统的软件平台和基于CAN总线的网络通信平台逐渐成为当今汽车电子业的主流。

1 OSEK/VDX规范简介

在嵌入式实时操作系统方面,为了满足日益庞大、复杂的汽车电子控制软件的开发需要,实现应用软件的可移植性和不同厂商控制模块间的可兼容性,1993年德国汽车工业界联合推出了汽车电子的开放式系统及接口——OSEK/VDX规范(以下简称“OSEK规范”),旨在为汽车上的分布控制单元提供一个开放结构的工业标准。OSEK规范从实时操作系统(RTOS)、软件接口、通信和网络管理等方面对汽车电子控制软件开发平台作了较为全面的定义与规定。尽管该规范还处在不断完善中,但它所提出的一整套解决方案将是未来汽车电子软件开发的发展方向。

为了达到OSEK软件可移植的目标,OSEK规范中定义了配置使用OSEK应用程序的方法——通用实现语言OIL。OSEK配置器就是使用图形化的用户接口,根据用户需求配置OIL文件,并最终生成OSEK实时操作系统初始化代码的工具。它是开发符合OSEK规范的实时操作系统的重要组成部分。

2 OSEK配置器的主要功能

OSEK应用程序的开发流程如图1所示。用户通过OSEK配置器根据软硬件的需求,对操作系统的属性和所有系统对象进行静态配置。配置完成后,OSEK配置器生成符合OSEK规范的OIL配置文件,并进一步生成与操作系统相关的C代码和头文件,以提供OSEK实时操作系统初始化时必备的系统参数。为保证软件的兼容性,OSEK配置器还能够从外部直接读取符合OSEK规范的OIL文件,完成生成OS静态系统文件的过程。

用户完成应用程序代码编写和OIL文件配置后,OSEK配置器所产生的代码、操作系统的部分内核和应用程序一起交叉编译,而其他操作系统内核代码作为一个库,被链接器整合在一起。本文主要研究通过OSEK配置器生成符合OSEK规范的OIL配置文件及静态系统文件的过程(如图1中虚线部分所示)。

3 OSEK配置器的实现

3.1 图形用户接口GUI的实现

OSEK应用程序的OIL语言描述包含一组OIL对象描述,分别是CPU、OS(操作系统)、APPMODE(应用程序模式)、ISR(中断服务)、RESOURCE(资源)、TASK(任务)、COUNTER(计数器)、EVENT(事件)、ALarm(警报)、COM(通信子系统)、MESSAGE(消息)、IPDU(外部通信)和NM(网络管理)。其中,CPU是其余OIL对象的容器。OIL为它的对象定义了标准类型,每一个对象都可以用一些属性和参数来描述。

对于不同的OSEK实现,生成OIL配置文件的方法是不同的。由于用户自己编写OIL文件具有一定的复杂性,因此,在集成开发环境中带有一个上下文相关帮助的、可视的图形用户接口GUI是非常必要的。在集成开发环境中,一个包含GUI的OSEK配置器需要包含以下组件:

◇一张遵循Windows Explorer格式的OSEK对象清单,用户可以根据需要添加和删除DIL对象;

◇一个图表,用于显示每个对象的属性(包括标准属性和与实现有关的属性),用户可更改对象的属性并且实时更新OIL文件;

◇一个用于记录和显示的窗口。

集成开发环境的OSEK配置器工作界面如图2所示,其数据的管理和显示采用XML技术来实现。

XML以一种开放的自我描述方式定义了数据结构,在描述数据内容的同时能突出对结构的描述,从而体现出数据之间的关系。它相当于一个容器,可用来存储OSEK规范中OIL定义的各个对象。对每个OIL对象来说,其属性和子属性都包含不同的数据结构,可以通过XML树型结构方便地表示出来;而对于同一类对象又包含相同的属性和子属性,可用相同的XML模板来表示。

由于XML技术可以很方便地存储、描述和管理结构化的数据,并且有效地将数据和数据的显示相分离,因此,在OSEK配置器中采用XML技术来实现OIL文件图形用户接口的配置,是非常方便和高效的。[page]

3.2 利用XML技术配置OIL对象

基于XML的OSEK配置器,将OIL文件定义的属性存放在初始化的XML模板文件中,并指定其默认值。当用户添加、删除OIL对象或者修改对象的属性和参数时,可通过KML解析器实现用户配置界面与XML文件的同步。其过程如图3中虚线部分所示。

例如,用户在配置一个OIL对象ALarm时,需要指定其3个属性,分别是警报依附计时器COUNTER、警报动作ACTION以及是否自动启动AU-TOSTART。其中,ACTION和AU-TOSTART又包含各自的子属性,使用XML技术可以很方便地管理和修改这些数据。

通过GUI配置一个报警器的属性如下:警报依附计时器counterA,采用自动启动方式,且其初次响应时间和周期响应时间分别为30ms和20 ms。OS-EK配置器通过XML解析器将这些属性值读取出来,并保存在XML源文件alarm.xml中。以下是此XML文件的源代码;


3.3 利用XSLT技术生成OIL文件

用户配置的OIL信息通过GUI保存为XML文件后,利用XSLT技术生成符合OSEK规范的OIL配置文件。XSLT文档本身是一个良掏的XML文档,它被链接到需要转换的XML文档上,通过XSLT处理器实现对XML文档的解析和转换过程。XSLT转换的过程如图4中虚线部分所示。

例如3.2节中保存ALARM配置信息的文件alarm.xml,通过定义XSL样式表文件xml20il.xsl将其转换为标准的OIL文件。为了保证XSL文件的通用性,对输入XML文档每个层次的节点都设计一个框架模板tem-plate,即为OIL对象的每个属性和部分子属性定义框架模板。这样,当OIL对象增加和删除时,XSL文件都可以快速地完成转换而不需要做任何修改。使用Microsoftmsxml 4.o作为:XSLT处理器,定义转换的输出方式为文本格式。
转换3.2节中。KML文件的部分关键源代码如下:


3.4 读取OIL配置文件和生成代码

为了实现OIL文件的可移植性和可重用性,OSEK配置器还需要实现从外部直接读取OIL文件(可由用户手动编写或其他OSEK实现生成),并通过GUI显示和修改属性配置的功能。这个过程需要一个OIL语言解析器,通过解析器将OIL文件转换成XML文件提供给GUI,并且生成与操作系统相关的C代码和头文件。本组件通过LEX和YACC语言开发OIL语言解析器。[page]

3.4.1 利用ALEX和AYAGO构造解析器

Parser Generator是Windows环境下使用LEX和YACC语言开发编译器的集成开发工具,包含了编译程序构造工具ALEX和AYACC。ALEX和AYACC不仅可将LEX和YACC源程序转换成C语言词法和语法分析程序,还可以根据用户需要产生C++和Java代码的词法和语法分析程序。

OIL语言解析器的解析过程包括词法分析、语法分析、错误处理和目标代码的生成。首先根据OIL文件规范中的对象和属性值、语法规则编写LEX和YACC源文件,通过ALEX和AYACC自动生成以C++语言为代码的词法分析类OilLexer和语法分析类OilParser,并且重载和添加一砦类成员函数;然后将这两个类加入到VC工程中,实现程序的错误处理和自动代码生成部分,从而开发出OIL语言解析器。整个解析器设计原理如图5所示。


3.4.2 词法分析类和语法分析类的设计

在词法分析阶段,扫描程序将OIL文件中的字符序列分解,去掉空格、换行等自字符,并把识别出来的各个单词符号收集到记号(token)单元中。若在分析过程中发现词法错误,则转入错误处理程序。ALEX的输入规则文档Lexer.l包括以下3部分:

声明部分。包含所需的头文件及词法分析类的定义。

◆规则部分。定义正则表达式和OIL对象的关键字,然后添加对相应模式处理的C++语言源代码,最后将token送给语法分析类OiiParser。例如:


◆程序部分。设计OIL扫描器时无需其他额外功能,因此为空。

在语法分析阶段,语法分析程序从词法分析类中获取记号形式的源代码,并完成定义OIL语言结构的语法分析。AYACC输入规格文档Parser.y也包括3部分:声明部分、规则部分和程序部分。在声明部分,包含OilParser类所需的头文件以及声明从词法分析器返回的token记号。规则部分分析OIL文件的语法规则。OIL文件的语法遵循Backus-Naur范式(BNF),对于每个OIL对象属性的定义,其OIL实现类似于一个C结构定义。一个OIL文件由3个模块组成:版本、执行定义和应用程序定义。用BNF范式可表示为:

执行定义包含了一个OSEK实现的所有属性,这些属性的数据类型和取值范围可能是受限制的。因此在语义规则部分设置错误处理语句,对OIL对象属性的数据类型和取值范围进行检查。ALEX和AYACC的特性,可使错误检测简单、直观地实现,并且很容易和错误处理类集成,这对于从外部读取OIL文件时进行语义判断,保证OSEK配置器的兼容性有着重要的意义。

应用程序定义包含了一系列对象以及这些对象属性的赋值,除了OS、COM和NM对象外,应用程序可以定义多个同一类型的对象。根据应用程序定义规则,完成形式文法规则以及对每条规则进行语义处理的C++语句。在处理语句中,根据GUI部分定义的XMI.模板格式(如图4中的MPC.xml),将得到的对象及其属性值一一对应到XML的树型结构中,从而完成OIL文件转换为XML文件的过程。同样,在处理语句中,根据操作系统中定义的接口将OIL对象及其属性值提取出来,生成符合OSEK实时操作系统的API函数和数据结构,放在C代码和头文件中,从而完成整个代码生成的过程。

4 结论

OSEK配置器的开发是OSEK实时操作系统中的重要组成部分。在开发过程中,利用XML技术方便管理和存储数据的功能,实现了从可视化的GUI生成OIL文件的过程;利用OIL语言解析器的高教性和强大的出错处理功能,实现了GUI从外部读取OIL文件及代码生成的过程,从而保证了OIL文件的可移植性、可扩展性和可重用性。此组件在集成开发环境中运行稳定,这在开发具有自主知识产权的OSEK实时操作系统中具有重要的意义。

关键字:OSEK  配置器  网络管理 引用地址:嵌入式OSEK配置器的设计与实现

上一篇:燃料电池发动机二次开发控制系统的设计与实现
下一篇:如何缩短ECU测试时间及提升测试效能的各种功能

推荐阅读最新更新时间:2024-05-02 22:26

以CAN总线为例介绍局部网络管理的概念及实现
  一、引言   近年来,汽车的节能问题备受关注,消减不必要的能源损耗是一种非常有效的方法。当前,大多数车辆在点火钥匙打到OFF档之后,部分功能仍需要使用,例如:车辆防盗、电子驻车功能等。为了降低电量消耗,避免蓄电池电量消耗过多导致汽车无法启动,需要KL30节点在OFF档之后能进入低功耗状态,关闭大部分不需要的功能,尽可能减少电量消耗。对于分布式功能网络,由于连接到总线上的节点需要协同工作,所以各节点遵循同样的协议以实现同步睡眠及唤醒。   当前,大多数的车辆都是遵循OSEK或者AUTOSAR网络管理协议,来实现节点休眠唤醒功能的。由于目前车辆的电子电气系统越来越复杂,KL30节点也越来越多,当前的网络管理协议也逐渐呈现出
[嵌入式]
51单片机寄存配置小技巧
整型数据转换二进制数据的技巧知识点: 该技巧比较适合应用在51单片机寄存器的配置方面;减少了我们的计算量。 思路—— 我们比较习惯直接的整型数据;当我们需要配置寄存器,这时能不能直接利用该数据作为我们配置寄存器的数据呢?这过程需要将数据转换,例如将一个int 型 11110111 转换成 0xf7 该如何做到呢? 此时可以利用到##在C语言中的粘合作用,具体百度。 一, #define Bin(n) LongToBin(0x##n##l) //注意该处l是L的小写,而不是1。 此时使用时11110111则变为十六进制的0x11110111 而在此之前应先定义LongToBin(n) 二, #d
[单片机]
51单片机寄存<font color='red'>器</font><font color='red'>配置</font>小技巧
2K屏+64位处理 三星S6配置泄露
   昨天我们报道了三星GALAXY S6的开发项目代号Project Zero的消息,似乎预示着三星在这款旗舰机型的设计上会从“0”开始的想法。而现在,三星资讯网站SamMobile则再次放出独家消息,为我们提前披露了三星GALAXY S6的部分硬件规格,包括会采用2K分辨率显示屏以及全新64位Exynos 7420处理器等配置。    配备2K显示屏   作为三星下一代智能旗舰,三星GALAXY S6会在硬件规格上大幅升级显然是顺理成章的事情。而从SamMobile最新披露的消息来看,该机并不会采用所谓的4K显示屏,而是会装载2K分辨率的 触控屏,但目前尚不清楚屏幕具体的尺寸大小。至于该机的摄像头配置方面,三星会继续使
[手机便携]
【STM32】串口相关配置寄存、库函数(UART一般步骤)
STM32F1xx官方资料: 《STM32中文参考手册V10》-第25章通用同步异步收发器(USART) 串口相关配置寄存器 状态寄存器(USART_SR) 状态寄存器适用于检测串口此时所处的状态。它能够检测到的状态有:发送寄存器空位、发送完成位、读数据寄存器非空位、检测到主线空闲位、过载错误为等等。 这边主要关注两个位:RXNE和TC(第5、6两位)。 RXNE(读数据寄存器非空):当该位被置1的时候,就是提示已经有数据被接收到了,并且可以读出来了(即RDR移位寄存器中的数据被转移到USART_DR寄存器中)。这时候要做的就是尽快读取USART_DR,从而将该位清零,也可以向该位写0,直接清除。
[单片机]
【STM32】串口相关<font color='red'>配置</font>寄存<font color='red'>器</font>、库函数(UART一般步骤)
STM32 GPIO的8种工作模式及相关配置寄存
GPIO八种工作模式 四种输入: GPIO_Mode_IPU(上拉输入) GPIO_Mode_IPD(下拉输入) 原理: 经过上拉开关和下拉开关的连接,再经过触发器转化为0,1的数字信号,存储到数据寄存器中,然后我们就可以通过配置寄存器CRL,CRH控制这两个开关。 用法: 若GPIO引脚配置为上拉输入模式,在默认状态下(GPIO引脚无输入),取得的GPIO引脚数据为1,既高电平. 而下拉输入模式则是相反的,在默认状态下其引脚数据为0,低电平. GPIO_Mode_IN_FLOATING(浮空输入) 原理: 不接上拉和下拉开关,直接经由触发器输入. 用法: 若配置成这个模式可以用电表测量其引脚电压是1点几伏(不确定的值).由于输
[单片机]
利用可配置处理来创建多标准多分辨率视频引擎
  随着消费类电子产品,尤其是手机、PDA和便携式媒体播放器(PMP)的急剧发展,其对于终端硅供应商的要求也大大提高。对这些供应商来说,设计仅仅能够适用于一到两个多媒体编解码器或无线标准的IC已经远远不够了。消费者希望他们的设备能够播放各种采用不同的编码标准和无线下载标准的媒体。因此,必须采取一个新的更具灵活性的途径来更好地适配新的媒体标准。在本文中,我们主要谈一谈视频解码器和编码器引擎所面对的挑战和机遇。    基于RTL的传统视频引擎设计方法   上一代视频ASIC设计的目的是为了解码和编码MPEG-2,因为这是DVD所使用的标准。其中也有些支持MPEG-1,可以播放VCD。大多数情况下,这种单个应用的逻辑实现策略就是:利
[手机便携]
利用可<font color='red'>配置</font>处理<font color='red'>器</font>来创建多标准多分辨率视频引擎
ECS Inc.发布ECSpressCON系列可配置时钟振荡产品
ECS Inc. International宣布全球扩展计划,推出全新硅基可配置时钟振荡器系列。 硅基频率控制产品的全球创新领导厂商和制造厂商ECS Inc. International宣布推出ECSpressCON™ 系列可配置振荡器产品。 ECS Asia Pacific Limited首席执行官Herb Chaney指出:“ECSpressCON™作为目前市场上的同级最佳硅基可配置时钟振荡器产品,具有绝对的差异性。它的性能表现几乎超越其它所有竞争产品。” Chaney补充道:“ECSpressCON™是设计人员和采购人员的梦想产品。通过次日交付样品,以及在少于两周内提供最多20,000个的产量,显示出我
[嵌入式]
STM32F103 GPIO寄存配置
每个GPI/O端口有 两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH) 两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR) 一个32位置位/复位寄存器(GPIOx_BSRR) 一个16位复位寄存器(GPIOx_BRR) 一个32位锁定寄存器(GPIOx_LCKR) 函数介绍 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct) 功能: 根据 GPIO_InitStruct 中指定的参数初始化外设GPIOx寄存器 参数: GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设 GPIO_InitStru
[单片机]
STM32F103 GPIO寄存<font color='red'>器</font><font color='red'>配置</font>
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved