全部学习汇总: https://github.com/GreyZhang/hack_autosar">https:///GreyZhang/hack_autosar
继续学习AUTOSAR,看文档。

5.2.4.1.2关于枚举
枚举类型的定义
在AUTOSAR元模型中,枚举不是通过ApplicationCompositeDataType实现的。
相反,整数的范围可以用作单个ApplicationPrimitiveDataType或类别值的ImplementationDataType或归结为类别值的ImplementationDataType的TYPE_引用的结构描述。
整数到枚举定义范围内标签的映射通过附加的ComputeMethod被视为语义定义的一部分,而不是结构描述的一部分。
枚举值的说明
对于基于适用CompuMethod中定义的标签的枚举值规范,有必要根据使用的AutosarDataType区分两种方法:
•ImplementationDataType:[constr_1225]中提到的,只能使用TextValueSpecification定义枚举的标签。
•ApplicationPrimitiveDataType:使用ApplicationValueSpecification.swValueCont.swValuesPhys.vt或ApplicationRuleBasedValueSpecification.swValueCont.ruleBasedValues.arguments.vt。
SwDataDefProps上下文中的相关元类如图5.7所示。这包括所有可能有助于在C代码中定义CompuScale符号的元类,请参见[TPS_SWCT_01431]。

图5.7:枚举规范的相关元类
第5.5.1.3节中包含了一个枚举在ARXML中的外观示例。

5.2.4.1.3校准参数的数据类型
校准参数的数据类型也被描述为基本类型
从应用程序的角度来看,校准参数的数据类型也被描述为基本类型。这是显而易见的,如果它们是简单值(类别值)。此外,类别字符串在应用程序级别被视为基本类型。
不太明显的是,VAL_BLK、COM_轴、RES_轴、CURVE、MAP、CUBOID、CUBE_4和CUBE_5类别的应用程序数据类型没有被描述为复合数据类型(就应用程序级别而言),尽管它们承认具有某种内部结构。
与ApplicationCompositeDataTypes不同,它们的组成方式与其他AutoSardDataTypes不同。为了与现有校准技术兼容,需要对其子结构进行特殊描述。
SwDataDefProps控制校准参数的结构
这些类型的子结构连接到SwDataDefProps。通过这种方式,可以在数据原型或其他工件的级别上定义SwDataDefProps发挥作用的地方。有关SwDataDefProps这些部分的详细信息,请参见第5.4.4和5.5.5章。

5.2.4.1.4文本字符串的数据类型
文本字符串的定义
类别字符串的ApplicationPrimitiveDataType应具有确定arraySizeSemantics和swMaxTextSize的swTextProps。
ApplicationPrimitiveDataType应解释为特定编码的
为了指示ApplicationPrimitiveDataType应解释为特定编码的字符串,它应引用swDataDefProps.swTextProps.baseType,并且引用的SwBaseType中与此目的相关的唯一属性是BaseTypeDirectDefinition.baseTypeEncoding。


这个元类表示适用于变量或校准参数中字符串的特定属性。

大小可变的字节数组
SwTextProps可用于定义大小可变的字节数组。
生成A2L也可能需要SwRecordLayout
如果字符串是校准数据的一部分,则生成A2L也可能需要SwRecordLayout。
如[TPS_SWCT_01128]所述,对于类别字符串的ApplicationPrimitiveDataTypes,SwDataDefProps.swRecordLayout的定义被认为是强制性的。
以下一系列XML片段举例说明了用于表示文本字符串的数据类型的定义。首先,定义了适用的ApplicationPrimitiveDataType(参见图5.8):

这是字符串定义的一个例子。

请注意,类别设置为值字符串。此外,ApplicationPrimitiveDataType.swDataDefProps.swTextProps还指示字符串的宽度,并定义(通过引用baseType)此字符串数据类型应使用的编码。
进一步注意,ApplicationDataType直接引用(跨实现级别)SwBaseType这一事实代表了一个例外,即ApplicationDataType不应关注AUTOSAR中数据类型定义的最低级别。
如果实现级别的桥接被接受为ApplicationDataType建模的一般模式,则很容易在某种程度上绕过实现级别,这将降低ApplicationDataType的通用性。

类别字符串的ApplicationPrimitiveDataType需要SwRecordLayout
如[TPS_SWCT_01179]中所述,类别字符串的ApplicationPrimitiveDataType被视为复合基元数据类型。
因此,它需要引用SwRecordLayout的定义,该定义预设了创建匹配ImplementationDataType的方法。
在此特定示例中,SwRecordLayout的定义预见了类别字符串的ApplicationPrimitiveDataType将被实现为结构化数据类型,该数据类型包括:
1字符串数据类型实例的大小,以字符数加以下信息来表达
2可用于存储字符串数据类型实例中包含的单个字符的数组。
根据所使用的编码,数组可能需要比相应的大小值更大(就元素数量而言)。此外,SwRecordLayout的定义已经考虑到通过ImplementationDataType实现数组数据类型需要定义ImplementationDataTypeElement。
[TPS_SWCT_01489]中记录了SwRecordLayoutV.swRecordLayoutVProp标准值的含义。在本示例的范围内,使用值COUNT和VALUE。
swRecordLayoutGroupTo包含值-1这一事实意味着迭代在数组的最后一个元素结束。

这是一个定义的例子。

请进一步注意,所讨论的类别字符串的ApplicationPrimitiveDataType示例还包含字符串数据类型的invalidValue定义。
下一步是定义ImplementationDataType,它表示实现级别上的字符串类型。ImplementationDataType的定义可以从适用的SwRecordLayout的定义派生。
请注意,ImplementationDataType还定义了invalidValue。
如[TPS_SWCT_01487]所述,无法正式检查类别字符串的ApplicationPrimitiveDataType范围内定义的invalidValue与相应ImplementationDataType范围内定义的invalidValue的一致性。

这是字符串实施的一个例子。

这个定义的有趣之处在于,在实现级别,它(由SwRecordLayout的定义驱动)决定将字符串实现为大小元素(简称“size”)和值元素(简称“string”)的结构它又被定义为数组数据类型,因此有一个子元素,名为“character”。
后者引用(在swDataDefProps.implementationDataType角色中)平台数据类型“uint8”(根据平台数据类型的规则,该类型由implementationDataType“uint8”实现)。
请注意,名为“MyApplicationStringType”的ApplicationPrimitiveDataType引用了在以下XML片段中定义的名为“MyTextBaseType”的SwBaseType:
具体的代码实现参考上面的代码片段。

SwBaseType的此定义对字符串数据类型的总体定义的贡献由编码定义(设置为UTF-8)表示。但是,仍然缺少一个重要部分,即ApplicationPrimitiveDataType到ImplementationDataType的映射定义(反之亦然):
如前所述,与类别字符串的ApplicationPrimitiveDataType相对应的ImplementationDataType的定义在某种程度上可以从ApplicationPrimitiveDataType.swDataDefProps.swRecordLayout派生。

DataTypeMap在ApplicationPrimitiveDataType.swDataDefProps.swRecordLayout存在时是必需的
即使ImplementationDataType是从定义SwRecordLayout的ApplicationPrimitiveDataType派生的,DataTypeMap的定义也是必需的。
[TPS_SWCT_01570]存在的一个动机是,AUTOSAR ECU的集成器可以正确地决定采用不同的实现数据类型,而不是基于SwRecordLayout生成的实现数据类型。
这部分梳理完了应用数据类型中的原始数据类型,后面再梳理一下组合数据类型。
















