3. ARXML核心元素:AR-PACKAGE、AR-PACKAGES、ELEMENTS、SHORT-NAME

好,咱们今天来啃ARXML里最基础、也最绕不开的几个核心元素。说白了,你写ARXML文件,翻来覆去就是在跟这四个东西打交道:AR-PACKAGEAR-PACKAGESELEMENTS、还有SHORT-NAME

我个人习惯把ARXML比作一个文件柜。你想想看,一个柜子有抽屉,抽屉里放文件夹,文件夹里装文件。ARXML的结构,就是这么个道理。

3.1 SHORT-NAME:每个元素的身份证

先讲最简单的,也是最重要的——SHORT-NAME

在ARXML里,几乎每个有意义的元素都得有个短名。它就是元素的唯一标识。我见过不少新手,上来就写长名字,结果解析器报错。记住,SHORT-NAME只能包含字母、数字、下划线,不能有空格,不能有特殊符号。

核心规则:同一个AR-PACKAGE内,SHORT-NAME必须唯一。跨包可以重名,但我不建议你这么做——维护起来太痛苦了。

<SHORT-NAME>My_Swc</SHORT-NAME>  <!-- 正确 -->
<SHORT-NAME>My Swc</SHORT-NAME>    <!-- 错误,有空格 -->

3.2 AR-PACKAGE:文件柜的抽屉

AR-PACKAGE就是那个抽屉。它用来组织和管理一组相关的元素。你可以把所有的SWC放一个包,所有的数据类型放另一个包。

嗯,这里要注意:AR-PACKAGE是可以嵌套的。就像抽屉里还能放小抽屉。我曾经在一个项目里,看到有人把所有东西都塞进一个包,结果那个ARXML文件大到打开都要半分钟。千万别这么干。

<AR-PACKAGE>
    <SHORT-NAME>DataTypes</SHORT-NAME>
    <ELEMENTS>
        <!-- 具体的数据类型定义 -->
    </ELEMENTS>
</AR-PACKAGE>

3.3 AR-PACKAGES:抽屉的集合

AR-PACKAGESAR-PACKAGE的容器。它出现在ARXML文件的根元素里,用来装所有的包。

说白了,它就是文件柜本身。你打开一个ARXML文件,第一眼看到的就是<AR-PACKAGES>,然后里面一个接一个的<AR-PACKAGE>

我的经验:写ARXML时,先把AR-PACKAGES的结构搭好,再往里填内容。就像盖房子先搭框架,后面才不会乱。

3.4 ELEMENTS:抽屉里的文件夹

ELEMENTSAR-PACKAGE里真正装东西的地方。它里面可以放各种AUTOSAR元素,比如SWC-IMPLEMENTATIONCOMPU-METHODDATA-CONSTR等等。

为什么要有ELEMENTS?直接放在AR-PACKAGE里不行吗?

不行。这是AUTOSAR的规范,AR-PACKAGE只能包含SHORT-NAMEAR-PACKAGES(子包)和ELEMENTS。所有具体的定义,必须放在ELEMENTS里。

<AR-PACKAGE>
    <SHORT-NAME>Swcs</SHORT-NAME>
    <ELEMENTS>
        <SWC-IMPLEMENTATION>
            <SHORT-NAME>MySwc_Impl</SHORT-NAME>
            <!-- 其他配置 -->
        </SWC-IMPLEMENTATION>
    </ELEMENTS>
</AR-PACKAGE>

3.5 它们之间的关系

来,我画张图帮你理一理。这张图展示了这四个元素是怎么嵌套的。

<AR-PACKAGES> <AR-PACKAGE> <SHORT-NAME>DataTypes</SHORT-NAME> <ELEMENTS> ... </ELEMENTS> </AR-PACKAGE> <AR-PACKAGE> <SHORT-NAME>Swcs</SHORT-NAME> <AR-PACKAGES> <AR-PACKAGE> ... </AR-PACKAGE> </AR-PACKAGES> </AR-PACKAGE> </AR-PACKAGES> AR-PACKAGE ELEMENTS AR-PACKAGES(子包)

3.6 实战中的避坑指南

我曾经在一个项目里,遇到一个特别诡异的问题。合并两个ARXML文件时,总是报重复元素错误。查了半天,发现两个文件里都有同一个AR-PACKAGESHORT-NAME都是CommonTypes,但里面的内容不完全一样。

这就是典型的命名冲突。合并时,工具不知道该保留哪个。

避坑指南:

  • 给包命名时,加上项目前缀或模块名,比如ProjectA_DataTypes
  • 不要用太通用的名字,比如TypesConfig
  • 合并前,先检查所有包的SHORT-NAME是否唯一

3.7 一个完整的例子

来看一个实际项目中会出现的片段。这个例子包含了我们刚才讲的所有元素。

<AR-PACKAGES>
    <AR-PACKAGE>
        <SHORT-NAME>MyProject_DataTypes</SHORT-NAME>
        <ELEMENTS>
            <COMPU-METHOD>
                <SHORT-NAME>CompuMethod_Temp</SHORT-NAME>
                <!-- 转换方法定义 -->
            </COMPU-METHOD>
        </ELEMENTS>
    </AR-PACKAGE>
    
    <AR-PACKAGE>
        <SHORT-NAME>MyProject_Components</SHORT-NAME>
        <AR-PACKAGES>
            <AR-PACKAGE>
                <SHORT-NAME>Sensors</SHORT-NAME>
                <ELEMENTS>
                    <SWC-IMPLEMENTATION>
                        <SHORT-NAME>TempSensor_Impl</SHORT-NAME>
                    </SWC-IMPLEMENTATION>
                </ELEMENTS>
            </AR-PACKAGE>
        </AR-PACKAGES>
    </AR-PACKAGE>
</AR-PACKAGES>

你看,MyProject_Components包下面还有一个子包Sensors。这种嵌套结构在实际项目中非常常见。我个人习惯把嵌套控制在3层以内,太深了读起来费劲。

3.8 小结一下

这四个元素,是ARXML的骨架。你写任何ARXML文件,都离不开它们。

  • SHORT-NAME:给元素起个唯一的名字
  • AR-PACKAGE:一个包,用来归类
  • AR-PACKAGES:包的集合,根容器
  • ELEMENTS:包里真正放内容的地方

记住这个结构,后面讲合并拆分时,你就能理解为什么有些文件能合、有些不能合。说白了,就是看这些包的SHORT-NAME有没有冲突,ELEMENTS里的内容能不能兼容。

一个小技巧:写ARXML时,先写SHORT-NAME,再写其他内容。名字定好了,后面怎么组织都顺。名字没定好,后面改起来要命。


专注资料整理