关于AUTOSAR 配置类和变体(Configuration Class & Variant)的理解
关于AUTOSAR 配置类和变体(Configuration Class & Variant)的理解
最近在研究MCAL的配置,主要在解析 EB Tresos 的xdm文件,顺着研究了一下 AutoSar 的 arxml文件,对于其中的配置类和变体一直不太理解。比如下面 CanBusoffProcessing 这个参数,Value Configuration中的 Pre-compile time 和 All Variants 是怎样的对应关系?
(有关Configuraotion Class的概念可以参考链接)
这两天查阅了一些资料,有一些理解,分享给大家。
首先要理清一个概念,根据 AutoSar 的方法论,配置工具(ECU Configuration Editor)会和两个xml文件有交互。一个xml用来描述配置参数的定义(ECU Configuration Parameter Definition),另一个用来描述具体的配置值(ECU Configuration Value description),可以理解为第一个用来定义数据类型,第二个用来描述具体的数据。我们这里讨论的主要是第一个xml中描述的配置参数的定义。
简单来说,配置类(Configuration Class)是针对具体的配置参数讲的,而变体(Variant)是对于整个模块讲的。
下面以 MCAL 中的 CAN 模块为例说明。
以下是在 AutoSar 官方提供的 AUTOSAR_MOD_ECUConfigurationParameter.arxml 中截取的CAN部分的描述,这里截取了参数 CanBusoffProcessing 作为说明。
在 Can 这个 模块(ECUC-MODULE-DEF) 中,有一个标签 <SUPPORTED-CONFIG-VARIANTS> , 定义了 Can 这个模块支持两种配置变体, VARIANT-POST-BUILD 和 VARIANT-PRE-COMPILE。
<ECUC-MODULE-DEF UUID="ECUC:f7ca73a3-b05b-4f6a-a64d-9a6e8da3314e">
<SHORT-NAME>Can</SHORT-NAME>
<DESC>
<L-2 L="EN">This container holds the configuration of a single CAN Driver.</L-2>
</DESC>
<ADMIN-DATA>
<DOC-REVISIONS>
<DOC-REVISION>
<REVISION-LABEL>4.4.0</REVISION-LABEL>
<ISSUED-BY>AUTOSAR</ISSUED-BY>
</DOC-REVISION>
</DOC-REVISIONS>
</ADMIN-DATA>
<RELATED-TRACE-ITEM-REF BASE="ArTrace" DEST="TRACEABLE">ECUC_Can_00489</RELATED-TRACE-ITEM-REF>
<LOWER-MULTIPLICITY>0</LOWER-MULTIPLICITY>
<UPPER-MULTIPLICITY-INFINITE>true</UPPER-MULTIPLICITY-INFINITE>
<POST-BUILD-VARIANT-SUPPORT>true</POST-BUILD-VARIANT-SUPPORT>
<SUPPORTED-CONFIG-VARIANTS>
<SUPPORTED-CONFIG-VARIANT>VARIANT-POST-BUILD</SUPPORTED-CONFIG-VARIANT>
<SUPPORTED-CONFIG-VARIANT>VARIANT-PRE-COMPILE</SUPPORTED-CONFIG-VARIANT>
</SUPPORTED-CONFIG-VARIANTS>
<CONTAINERS>
<!-- Container Definition: CanConfigSet -->
<ECUC-PARAM-CONF-CONTAINER-DEF UUID="ECUC:e28c636a-f5f1-4503-b0ad-aed7fbed80d7">
<SHORT-NAME>CanConfigSet</SHORT-NAME>
<DESC>
<L-2 L="EN">This container contains the configuration parameters and sub containers of the AUTOSAR Can module.</L-2>
</DESC>
<RELATED-TRACE-ITEM-REF BASE="ArTrace" DEST="TRACEABLE">ECUC_Can_00343</RELATED-TRACE-ITEM-REF>
<LOWER-MULTIPLICITY>1</LOWER-MULTIPLICITY>
<UPPER-MULTIPLICITY>1</UPPER-MULTIPLICITY>
<SUB-CONTAINERS>
<!-- Container Definition: CanController -->
<ECUC-PARAM-CONF-CONTAINER-DEF UUID="ECUC:a79e276f-cf20-496c-8587-edf4d9d2f01b">
<SHORT-NAME>CanController</SHORT-NAME>
<DESC>
<L-2 L="EN">This container contains the configuration parameters of the CAN controller(s).</L-2>
</DESC>
<RELATED-TRACE-ITEM-REF BASE="ArTrace" DEST="TRACEABLE">ECUC_Can_00354</RELATED-TRACE-ITEM-REF>
<LOWER-MULTIPLICITY>1</LOWER-MULTIPLICITY>
<UPPER-MULTIPLICITY-INFINITE>true</UPPER-MULTIPLICITY-INFINITE>
<PARAMETERS>
<!-- PARAMETER DEFINITION: CanBusoffProcessing -->
<ECUC-ENUMERATION-PARAM-DEF UUID="ECUC:1ac4345e-22de-49c3-8bb0-053a8e121758">
<SHORT-NAME>CanBusoffProcessing</SHORT-NAME>
<DESC>
<L-2 L="EN">Enables / disables API Can_MainFunction_BusOff() for handling busoff events in polling mode.</L-2>
</DESC>
<RELATED-TRACE-ITEM-REF BASE="ArTrace" DEST="TRACEABLE">ECUC_Can_00314</RELATED-TRACE-ITEM-REF>
<LOWER-MULTIPLICITY>1</LOWER-MULTIPLICITY>
<UPPER-MULTIPLICITY>1</UPPER-MULTIPLICITY>
<SCOPE>LOCAL</SCOPE>
<ORIGIN>AUTOSAR_ECUC</ORIGIN>
<POST-BUILD-VARIANT-VALUE>false</POST-BUILD-VARIANT-VALUE>
<VALUE-CONFIG-CLASSES>
<ECUC-VALUE-CONFIGURATION-CLASS>
<CONFIG-CLASS>PRE-COMPILE</CONFIG-CLASS>
<CONFIG-VARIANT>VARIANT-POST-BUILD</CONFIG-VARIANT>
</ECUC-VALUE-CONFIGURATION-CLASS>
<ECUC-VALUE-CONFIGURATION-CLASS>
<CONFIG-CLASS>PRE-COMPILE</CONFIG-CLASS>
<CONFIG-VARIANT>VARIANT-PRE-COMPILE</CONFIG-VARIANT>
</ECUC-VALUE-CONFIGURATION-CLASS>
</VALUE-CONFIG-CLASSES>
<SYMBOLIC-NAME-VALUE>false</SYMBOLIC-NAME-VALUE>
<LITERALS>
<ECUC-ENUMERATION-LITERAL-DEF UUID="ECUC:c7e3c917-84b8-dc84-9f56-c016f043b9ad">
<SHORT-NAME>INTERRUPT</SHORT-NAME>
<ORIGIN>AUTOSAR_ECUC</ORIGIN>
</ECUC-ENUMERATION-LITERAL-DEF>
<ECUC-ENUMERATION-LITERAL-DEF UUID="ECUC:cb6d0b10-0a36-e2dc-bc29-ae297cee4673">
<SHORT-NAME>POLLING</SHORT-NAME>
<ORIGIN>AUTOSAR_ECUC</ORIGIN>
</ECUC-ENUMERATION-LITERAL-DEF>
</LITERALS>
</ECUC-ENUMERATION-PARAM-DEF>
</PARAMETERS>
</ECUC-PARAM-CONF-CONTAINER-DEF>
</SUB-CONTAINERS>
</ECUC-PARAM-CONF-CONTAINER-DEF>
</CONTAINERS>
</ECUC-MODULE-DEF>
Can这个Module下面有一个容器( CONTAINERS ) CanConfigSet,这个容器下面有一个子容器( SUB-CONTAINERS ) CanController,子容器下面有一个枚举类型的参数( ECUC-ENUMERATION-PARAM-DEF ) CanBusoffProcessing。这个参数的配置类信息就是图1中的信息。
这里意思是:这个参数只支持 Pre-compile time 配置,而且对于Can模块的所有变体,都支持Pre-compile time 配置。由上面的信息知道,Can这个模块支持两种配置变体,Post-build 和 Pre-compile。那么这里意思就是,对于选择 Post-build 和 Pre-compile 配置的Can模块,CanBusoffProcessing这个参数都支持 Pre-compile 配置。
再举一例,这里直接看SWS (ECUC_Can_00485),
CanFdPaddingValue这个参数,支持 Multiplicity 和 Value 的配置。
以 Multiplicity 配置类说明,CanFdPaddingValue 的 Multiplicity 支持 Pre-compile time 配置和 Post-build time 配置。
对于选择 Pre-compile 的Can模块,这个参数支持 Pre-compile 配置。
这里需要注意,AutoSar规范《AUTOSAR_SWS_BSWGeneral》中提到,配置变体"向前兼容"。
[SWS_BSW_00237] Configuration variants
⌈Different use cases require different kinds of configurability. Therefore, the following configuration variants are provided:
- VARIANT-PRE-COMPILE: Allows individual configuration parameters to be realized at “Pre-compile time” only.
- VARIANT-LINK-TIME: Allows individual configuration parameters to be realized at either “Pre-compile time” or “Link time”.
- VARIANT-POST-BUILD: Allows individual configuration parameters to be realized at either “Pre-compile time”, “Link time” or “Post-build time”.⌋()
因此,对于选择 Post-build 配置的 Can 模块,CanFdPaddingValue支持 “Pre-compile time”, “Link time” or "Post-build time"这三种配置方式。
换句话说,如果 Can 模块选择 Post-build 配置,CanFdPaddingValue 这个参数可以 Post-build 配置,可以 Link time 配置,也可以 Pre-compile 配置。
以上就是我对 AutoSar配置类和变体的理解,如果有错误请大佬指出,也欢迎大家讨论~~
更多推荐
所有评论(0)