汽车电子OSEK配置器的设计与实现

发布者:DelightWish123最新更新时间:2008-01-22 来源: 单片机及嵌入式系统应用关键字:配置器  OSEK  OIL  词法分析  VDX  配置文件  DIL  AYAGO 手机看文章 扫描二维码
随时随地手机看文章

  摘要介绍在集成开发环境中,通过OIL语言配置OSEK实时操作系统厦应用程序的过程,包括使用图形化的用户界面进行读取、编辑、保存OIL文件以及自动生成代码等功能的实现;利用XML技术和OIL语言解析器保证了OIL文件的可移植性、可扩展性和可重用性。

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

  1 OSEK/VDX规范简介

  在嵌入式实时操作系统方面,为了满足日益庞大、复杂的汽车电子控制软件的开发需要,实现应用软件的可移植性和不同厂商控制模块间的可兼容性,1993年德国汽车工业界联合推出了汽车电子的开放式系统及接口——OS-EK/VDX规范(以下简称“OSFK规范”),旨在为汽车上的分布控制单元提供一个开放结构的工业标准。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文件图形用户接口的配置,是非常方便和高效的。

  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语言解析器。

  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  OIL  词法分析  VDX  配置文件  DIL  AYAGO 引用地址:汽车电子OSEK配置器的设计与实现

上一篇:FPGA 为三洋最新款家庭影院投影仪添彩
下一篇:ARM嵌入式汽车节能控制系统

推荐阅读最新更新时间:2024-05-13 21:01

凌力尔特发布可配置电源监视LTC2939
    凌力尔特公司 (Linear Technology Corporation) 推出具处理器监察功能的 6 通道电源监视器 LTC2939,该器件可为低至 1.2V 的低压应用而配置。用户可以选择 16 个预置或可调电压门限组合之一,所有组合在 -40℃至 125℃的温度范围内都保持 ±1.5% 的准确度。这些预置设置点是通过一个在单个引脚上的外部电阻对来选择,而实际门限则由集成的精确分压器设置,以实现 5V、3.3V、2.5V 和 1.5V 电源监视。内置的抗电源干扰能力使 LTC2939 实际上能够消除误检测,同时仅耗用 80uA 的电源电流。当采用 LTC2939 来监视多个正电源轨和负电源轨时,设置点、复位超时周期和
[电源管理]
stm32 高级定时1配置注意
void TIM1_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //①时钟 TIM1 使能 //定时器 TIM1 初始化 TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置时钟频率除数的预分频值
[单片机]
stm32 高级定时<font color='red'>器</font>1<font color='red'>配置</font>注意
如何通过配置负载点转换 (POL) 提供负电压或隔离输出电压
在温度高达 210 摄氏度或需要耐辐射解决方案的恶劣环境应用中,集成型降压解决方案可充分满足系统需求。有许多应用需要负输出电压或诸如 +12V 或 +15V 等隔离输出电压为 MOSFET 栅极驱动器电路供电或者为运算放大器实现偏置。我们将在本文中探讨如何使用 TPS50x01 配置降压转换器,提供负输出电压。此外,我们还将讨论如何通过提供高于输入压的电压来满足应用需求。 TPS50601-SP  和  TPS50301-HT  都是专为耐辐射、地质、重工业以及油气应用等恶劣环境开发的集成型同步降压转换器解决方案。TPS50x01 是具有集成型高侧及低侧 MOSFET 的电流模式控制器件。IC 的大型焊盘部分可通过检查热管理,让
[电源管理]
如何通过<font color='red'>配置</font>负载点转换<font color='red'>器</font> (POL) 提供负电压或隔离输出电压
STM32配置多个定时同时为光电编码模式的注意事项
我在做一个小车项目中使用STM32f103中的3个定时器同时配置为编码器模式是出现的一个问题,作为一个STM32的入门者在使用编码器模式时可能出现这样的情况:按照网上的一些程序配置一个定时器为编码器模式时不会出现大问题,但是当你用同样的配置程序,同时去配置多个定时器为编码器模式是就会出现有些编码器不能计数。其实很多网上的程序都只是把定时器的配置程序提供给你,而没有把相关的中断配置程序放上去,如果你是一名初学者可能不会发现,就可能会出现上面的问题。
[单片机]
ARM学习《八》——STM32定时配置及其中断设置!
好久没有写东西了,工作太忙都快没时间学习了。今天调试了STM32的定时器功能,STM32定时器比较多,但调试都是一样的,寄存器都是一一对应的。就拿TIM2举例说明。在网上搜了好多关于定时器的设置,但大多数都是一个版本,而且都是针对库函数操作的,让人看起来一头雾水,对于初学者很是不利(我也是初学者)。下面我将自己的定时器设置过程一一记录下来,以供大家参考,我们共同学习 首先定义定时器头文件,也就是定义寄存器以供操作: //************************************************************************* // // TIM2-Register //
[单片机]
linux内核配置文件.config,基于s3c2410实现
下面的文件的使用方法是:将下面的文件保存在linux内核源码目录中,文件的名称是.config,然后make menuconfig,在出现 的配置界面中选择Load Configuratio选项,然后可以在这个基础上修改自己的kernel。下面的配置是基于s3c2410,支持yaffs2 文件系统。我看了一下编译出来的uImage大概在800k左右,呵呵么这是本人第一次成功裁减内核。 # # Automatically generated make config: don't edit # Linux kernel version: 2.6.22.6 # Tue Mar 16 20:42:20 2010 # CONFIG_
[单片机]
灵活的 6 电源排序 提供非易失性配置和故障记录功能
凌力尔特公司 (Linear Technology Corporation)推出用于6个电压轨的可编程电源排序器和电压监察器 LTC2937 ,该器件内置了EEPROM。LTC2937可细致地监察和控制FPGA/ASIC/微处理器的负载点电源,这种监控需要严格的准确度和复杂的排序,以避免损坏处理器。LTC2937以可编程顺序接通和断开电源,可采用可调时间延迟或通过合格的事件 (即跨越电压门限)来区隔。一旦按序加电,就以准确度为 0.75%的欠压和过压门限来监视电源。LTC2937可提供灵活和精确的电源排序以及监视解决方案,从而满足高可用性计算机和服务器、网络路由器和交换机、企业级数据存储系统以及电信设备中严格的排序和容限要求。
[电源管理]
确保SRL和触发配置后正确初始化方法
FPGA 架构中的 SRL16 和触发器是通过 GWE(全局写使能)信号来释放的,该信号允许这些同步元件在配置完成后改变状态。GWE 是紧接配置后启动过程的一部分。   GWE 会为配置时钟同步释放 SRL16 和 触发器,并且会在该部分产生巨大的歪斜。因此,在同步设计中会产生两种类型的行为:   由于 GWE 释放的同步元件与配置时钟有关,而与用户的系统时钟无关, 因此,触发器和 SRL16 会产生时序违规。   传递 GWE 信号表明 SRL16 和触发器的释放时间可能稍有不同,从而导致设计的某些部分在 其他部分之前启动。   此问题将不会影响大多数设计。如果该设计符合下列标准之一,则应该在设计中实现此答复记录底部的
[模拟电子]
小广播
最新应用文章
换一换 更多 相关热搜器件

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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