分享

芯片里的A2L文件以及XML文件

 昵称48979411 2022-03-11

说来也是神奇,我意外进入了汽车的行业,发现汽车上用到了不少计算机技术。一个小小的ECU可以用在手机里,也可以用在电冰箱,洗衣机,以及在马路上飞驰的汽车系统里。当然了,天上的飞机里面的飞控系统也是跑在半导体上的。除了功耗,运算速度,交通工具里面的芯片对于安全的要求可谓是更上一层楼。这是后话,还是看看芯片里面有什么吧。

芯片里面有文件。也许硬件工程师会讲芯片就是大规模集成电路被刻到了硅基片,不过软件工程师可不这么看。Linux里面有一句经典的台词,一切皆文件。这句话来解释软件工程师眼中的汽车真的是再合适不过了。借用英飞凌Aurix TC397的说明书,每次上电之后,ECU都会首先运行厂家预留在ROM中的程序,之后根据图中的Reset Vector跳转到启动函数(startup function),启动函数在完成一系列初始化功能后会引导程序指针到c语言的入口,也就是我们熟悉的main函数。

基于厂家的芯片,我们可以对ROM区进行如下的一些自定义,黑色部分是出厂标配,红色部分可以提供给客户自己玩的,不过,这样的起点是不是有点高了。

Dataflash
标定数据
驱动(drive)
引导程序(BootLoader)
Recovery boot
common boot
NVshare
Jump block

      在芯片里,汽车就是一组标定好的抽象的参数,这些参数作为Damos变量的一部分都被记录在A2L文件里了。A2L是ASAM MCD 2 MC Language的缩写,使用一套类XML语言的描述性语言(采用开标签和关标签来描述信息),主要包含了ECU内部数据单元(characteristics 和 measurements)和ECU的接口(用来访问characteristics 和 measurements)。这么做的目的是为了方便ECU软件开发的参数标定。标定意味着通过修改常数,曲线以及映射来优化系统行为。这就意味着内部变量可以从内存读出并被转换成人能够理解的格式。在早期的ECU开发,参数的标定是直接在代码里面修改,每次源代码的修改都需要重新编译和再次的刷写。但是随着软件的复杂化,软件开发往往由功能开发者,软件开发者,标定工程师,整车测试工程师,项目管理者等组成。工作细分的副效应导致了项目进度的缓慢。实际上,测量和标定工作可以从软件的开发中分离开来,因为标定者需要记录前后调校的参数。于是乎,参数的标定工作从物理寄存器中抽象出来,就像我可以移动鼠标横跨多个文件夹一样,鼠标的中断服务不断地被触发,发出对内存文件的访问请求,而显示器上看到的则是从内存上文件读到的,或者发过来的数据流。这样做的意义在于打开了一个窗口,便于标定参数的修改。我个人觉得A2L文件是不是应该写在RAM区,这个有待考证。

ASAP标准还有ASAP1和ASAP3两个部分,ASAP1定义了标定系统与ECU之间的通信接口,分为物理接口和驱动代码规范。ASAP3规定了标定系统远程控制通信协议。

XML,Extensible Markup Language扩展性标识语言,HTML用于显示数据,XML用于传输和储存数据。比如苹果的重量是200克,鸡蛋的重量是50克,羽毛球的重量是5克,但是我们无法用程序或者说用程序从一个HTML文件的源代码中提取相关价格和重量类似的信息是非常繁琐的。但是我们使用XML定义新的标签,那么一个文件使用了这种新的标签之后就可以很轻松地通过计算机来识别重量这些信息了,因为数字所代表的含义已经被它的标签给标识出来了。比如下面一个文件。根据语法规则,XML的声明是区分大小写的(case sensitive),所以,<?xml>开头表示小写(lower case)。在 <!-- 和 -->之间的任何文本都是注释。

<?xml version = "1.0" encoding = "UTF-8"?><!--Information of books--><bookstore><book category="COOKING">  <title lang="en">Everyday Italian</title>   <author>Giada De Laurentiis</author>   <year>2005</year>   <price>30.00</price> </book><book category="CHILDREN">  <title lang="en">Harry Potter</title>   <author>J K. Rowling</author>   <year>2005</year>   <price>29.99</price> </book><book category="WEB">  <title lang="en">Learning XML</title>   <author>Erik T. Ray</author>   <year>2003</year>   <price>39.95</price> </book></bookstore>

每个元素都有一个start tag<> 和end tag</>。作为根元素bookstore有一个元素book,根据属性区分,分别是cooking,children和web。然后book又有四个子元素title,author,year,price。

DTD,全名是XML Document Type Declaration,文件类型声明,用于约束XML的文档格式,分为内部和外部两种。

数量词:

+:表示元素出现至少出现一次

?:表示元素出现0次或1次

*:表示元素出现任意次。举例<!ELEMENT books (book*)>

属性声明语法:

属性类型:CDATA,表示字符数据(character data)

默认值:

#REQUIRED,表示必须出现

#IMPLIED,表示不是必须出现

内部:

<?xml version = "1.0" encoding = "UTF-8"?><!--Information of books--><!DOCTYPE address [   <!ELEMENT books (book+)>   <!ELEMENT book (title,author,year,price)>   <!ATTLIST book category CDATA #REQUIRED >   <!ELEMENT title (#PCDATA)>   <!ATTLIST title lang CDATA #REQUIRED >   <!ELEMENT author (#PCDATA)>   <!ELEMENT year (#PCDATA)>   <!ELEMENT price (#PCDATA)>]><bookstore><book category="COOKING">  <title lang="en">Everyday Italian</title>   <author>Giada De Laurentiis</author>   <year>2005</year>   <price>30.00</price> </book><book category="CHILDREN">  <title lang="en">Harry Potter</title>   <author>J K. Rowling</author>   <year>2005</year>   <price>29.99</price> </book><book category="WEB">  <title lang="en">Learning XML</title>   <author>Erik T. Ray</author>   <year>2003</year>   <price>39.95</price> </book></bookstore>

外部:

<?xml version = "1.0" encoding = "UTF-8"?><!--Information of books--><!DOCTYPE book SYSTEM "book.dtd"><bookstore><book category="COOKING">  <title lang="en">Everyday Italian</title>   <author>Giada De Laurentiis</author>   <year>2005</year>   <price>30.00</price> </book><book category="CHILDREN">  <title lang="en">Harry Potter</title>   <author>J K. Rowling</author>   <year>2005</year>   <price>29.99</price> </book><book category="WEB">  <title lang="en">Learning XML</title>   <author>Erik T. Ray</author>   <year>2003</year>   <price>39.95</price> </book></bookstore>

外部的book.dtd文件

<?xml version = "1.0" encoding = "UTF-8"?><!--Information of books--><!DOCTYPE address [   <!ELEMENT books (book+)>   <!ELEMENT book (title,author,year,price)>   <!ATTLIST book category CDATA #REQUIRED >   <!ELEMENT title (#PCDATA)>   <!ATTLIST title lang CDATA #REQUIRED >   <!ELEMENT author (#PCDATA)>   <!ELEMENT year (#PCDATA)>   <!ELEMENT price (#PCDATA)>]>

最后似乎可以举一个昨天生成的文件,Pruefung是德语,测试的艺术,这里的根元素是就是Pruefung,子元素是PdCNT, <Info.../>这里是HTML的书写规则,表示空元素,插入单个行,起到换行的作用。

想来第一次接触HTML格式还是初中的微机课,一晃十年过去了。再后来就很少用代码去排版了,一般是用word。直到后来出国读书的时候,我接触了LaTeX,再次学习使用LaTeX去排版文字。一开始比较喜欢的地方是,它可以生成PDF文件,不会因为软件的版本而发生排版的错误,这个问题在word升级后经常发生,大家都只是吐槽一下,没有意识到这其实被Microsoft用垄断的手段限制了自由。再然后就是特殊字符用的挺爽,比如sigma或者beta或者alpha,大写小写用起来比用word插入特殊字符方便很多。再后来就是公式的排版,用起来也是异常方便,word后来可以装mathtype插件,这是后话。但是LaTeX对于数据的管理分类给我留下了很好的印象,图片专门有一个文件夹,参考文献专门有一个文件夹,添加或者删除很方便,word在这里只能说心有余而力不足。但是不知道为什么,国内依旧习惯于使用word,大家接触的还是word居多,这里真的挺无语的。回到一开始说的HTML,现在回想起来,其实这种用代码排版的思想是最初的想法,LaTeX其实是在这个基础上发展而来。而word,现在看来,可能是比尔给不想学习编程的人使用的吧,一不小心成了流行。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多