全部学习汇总: https://github.com/GreyZhang/hack_autosar
继续学习AUTOSAR,看一下文档。
5.2.4.2 应用复合数据类型
ApplicationArrayDataType 和 ApplicationRecordDataType
元类 ApplicationArrayDataType 和 ApplicationRecordDataType(详细信息如图 5.9 所示)提供了定义复合数据类型的方法。
如果应用程序软件想要访问组合的各个元素以及对整个组合进行操作,则需要这种组合数据类型,例如想要在单个事务中传达完整的记录或数组。
可以使用 ApplicationArrayDataType 和 ApplicationRecordDataType 的组合,以便 ApplicationArrayDataType 可以定义为 ApplicationRecordDataType 的 ApplicationRecordElement,并且以相同的方式 ApplicationRecordDataType 可以用作 ApplicationArrayDataType 的基本类型。 也可以创建嵌套的 ApplicationCompositeDataTypes。
图 5.9:ApplicationCompositeDataType 摘要
5.2.4.2.1 应用数组数据类型
可配置的数组大小
ApplicationArrayDataType 可能包含 maxNumberOfElements ApplicationArrayElements。
这些 ApplicationArrayElement 中的每一个都具有相同的数据类型。
当在软件组件描述中引用 ApplicationArrayDataType 的元素时,元素索引从 0 到 maxNumberOfElements-1 的值。
一种应用程序数据类型,它是一个数组,每个元素都是相同的应用程序数据类型。
描述应用程序数组数据类型的元素的属性。
请注意,有关特定 ApplicationArrayDataType 的元素数量的信息不是绝对的,但允许进一步解释。
特定 ApplicationArrayDataType 的元素数量在运行时可能会有所不同
也就是说,在某些情况下,特定 ApplicationArrayDataType 的元素数量可能会在运行时发生变化。
准确地说,元素的数量可能在 0 和 maxNumberOfElements 表示的值之间变化。
为此,可以使用附加属性 arraySizeSemantics 来阐明 maxNumberOfElements 的含义。
为了澄清,可能确实会发生这样的情况:特定ApplicationArrayDataType中元素的实际数量产生0,这仅仅是因为相应的DataPrototype是更高级别协议的一部分,在某些情况下,ApplicationArrayDataType的DataPrototype根本不需要用于表示给定语义。
此类型控制如何解释关于ApplicationArrayDataType中元素数的信息。
请注意,定义maxNumberOfElements语义的能力不仅限于应用程序数据类型级别。同样的方法也适用于ImplementationDataType。
角色类型中引用的ApplicationArrayElement类别和AutosarDataType应保持同步
ApplicationArrayElement的类别值应始终与ApplicationArrayElement引用的AutosarDataType的类别值相同。
大小指示器应通过软件组件进行更新
如果软件组件更改可变大小数组中有效元素的数量,它还应更新ImplementationDataType中的大小指示器。
大小指示器应由软件组件读取
如果软件组件接收到可变大小的数组,它应使用ImplementationDataType中的大小指示器来确定数组中有效元素的数量。
此枚举定义了处理可变大小数组大小的不同方法。
启用大小指示器
为了使RTE能够考虑可变大小数组数据类型内的有效元素的数量,应设置应用数据类型的DyrimaRayaysie配置文件和应用程序数组。
ApplicationArrayElement.arraySizeHandling的语义
属性ApplicationArrayElement.arraySizeHandling指定在多维可变大小数组的情况下如何确定大小。
这允许在多个维度的情况下指定嵌套可变大小数组大小之间的一致性。
使用合适的实现数据类型,可以启用其他softwarecomponents、RTE和其他BSW模块使用大小指示器,并且仅将有效数据元素从发送方传输到接收方。
映射的 ImplementationDataType 的内部结构
属性 dynamicArraySizeProfile 指定映射到 ApplicationDataType 的 ImplementationDataType 应遵循哪个内部结构。
映射的 ImplementationDataType 内部结构的配置文件
对于映射到 ApplicationDataType 的 ImplementationDataType 的结构,为 dynamicArraySizeProfile 定义了以下配置文件:VSA_LINEAR、VSA_SQUARE、VSA_RECTANGULAR 和VSA_FULLY_FLEXIBLE。
映射的 ImplementationDataType 内部结构的自定义配置文件
可以将自定义配置文件添加到 dynamicArraySizeProfile。 它们应具有特定于公司的前缀。
由于这是自定义配置文件或类别值定义的一般规则,因此自定义值应以公司特定的前缀开头,以避免与 AUTOSAR 标准的后续扩展发生冲突。
dynamicArraySizeProfile 用于指定可变大小数组的多个维度的元素数量如何相关。一方面,它们可以完全独立(VSA_FULLY_FLEXIBLE),或者每个维度具有相同数量的有效元素(VSA_SQUARE)。
属性 ApplicationArrayDataType.dynamicArraySizeProfile 和 ApplicationArrayElement.arraySizeHandling 存在的理由
乍一看,两个属性ApplicationArrayDataType.dynamicArraySizeProfile和ApplicationArrayElement.arraySizeHandling似乎是等效的。
然而,两者都是必需的,因为如果必须描述多维可变大小数组,则必须使用它们。在这种情况下,可能会出现无法事先指定的多种尺寸组合。
ImplementationDataType必须根据所选配置文件遵循某些规则。详见第5.2.5章。
应用程序阵列数据类型的配置文件VSA_LINER
如果ApplicationArrayDataType的DynamicCarraySizeProfile设置为VSA_LINEAR,则包含的ApplicationArrayElement应满足以下所有条件:
•属性ApplicationArrayElement.arraySizeSemantics应设置为值variableSize。
•应定义属性ApplicationArrayElement.maxNumberOfElements。
•属性ApplicationArrayElement.arraySizeHandling应设置为AllindicesAmeraySize的值。
•ApplicationArrayElement应由ApplicationDataType键入,该ApplicationDataType不是属性dynamicArraySizeProfile存在的ApplicationArrayDataType。
[constr_1314]中要求ApplicationArrayElement由ApplicationDataType键入的部分,该ApplicationDataType不是属性dynamicArraySizeProfile存在的ApplicationArrayDataType,基本上归结为“叶”的简单解释可变大小数组数据类型的数据类型可以是除可变大小数组数据类型之外的任何数据类型。
ApplicationArrayDataType的配置文件VSA_SQUARE
如果ApplicationArrayDataType的DynamicCarraySizeProfile设置为VSA_SQUARE,则包含的ApplicationArrayElement应满足以下所有条件:
•属性ApplicationArrayElement.arraySizeSemantics应设置为值variableSize。
•不应定义属性ApplicationArrayElement.maxNumberOfElements。
•属性ApplicationArrayElement.arraySizeHandling应设置为从ArrayElementTypeSize继承的值。
•ApplicationArrayElement应由ApplicationArrayDataType键入。
引用的ApplicationArrayDataType应通过嵌套ApplicationArrayDataType的链(考虑到“根”ApplicationArrayDataType的维度数)将ApplicationArrayDataType与ApplicationArrayElements引用到一个ApplicationDataType,该ApplicationDataType不是存在属性dynamicArraySizeProfile的ApplicationArrayDataType。
该链中的最后一个ApplicationArrayDataType应具有满足以下所有条件的ApplicationArrayElement:
•属性ApplicationArrayElement.arraySizeSemantics应设置为值variableSize。
•应定义属性ApplicationArrayElement.maxNumberOfElements。
•属性ApplicationArrayElement.arraySizeHandling设置为AllindiceSameArraySize的值。
之前的所有ApplicationArrayDataTypes应具有满足以下所有条件的ApplicationArrayElement:•属性ApplicationArrayElement.arraySizeSemantics应设置为值variableSize。
•不应定义属性ApplicationArrayElement.maxNumberOfElements。
•属性ApplicationArrayElement.arraySizeHandling应设置为从ArrayElementTypeSize继承的值。
•ApplicationArrayElement应由ApplicationArrayDataType键入。
这部分主要梳理了应用组合数据类型的内容,大量的篇幅其实是在描述可变长度数组的一个实现支持。