全部学习汇总: https:///GreyZhang/hack_autosar
继续学习AUTOSAR,看一下官方文档。

2.8 可变大小的数组数据类型
2.8.1 概述和用例
AUTOSAR 支持数组数据类型的定义,其中实际有效负载的大小在运行时会发生变化。 就配置而言,可以指定在运行时不应超过的数组元素的最大数量。
为了正确理解该方法,有必要了解对可变大小数组数据类型的支持是在两次波动中引入的,每次都有不同的动机。

2.8.1.1 “旧世界”动态大小数组
在第一次波动中,对可变大小数组数据类型的支持仅限于基本上归结为数组的数据类型,其中基类型是无符号整数数据类型,带有长度正好是一个字节。
此场景的主要用例源自诊断要求以及对 J1939 通信协议的支持。
在这两种情况下,可变大小数组数据类型的实际长度可以从上下文中确定,即通过诊断基本软件模块或通过 J1939 TP 的实现。
由于缺乏更好的术语,本规范区分了“旧世界”动态大小数组和“新世界”可变大小数组数据类型。 有必要明确定义允许消除“旧世界”动态大小数组和“新世界”可变大小数组数据类型之间歧义的特征。

通过 ApplicationArrayDataType 定义“旧世界”动态大小数组数据类型
ApplicationArrayDataType 没有定义属性 dynamicArraySizeProfile 并且聚合了 ApplicationArrayElement 其中属性 arraySizeSemantics 存在并设置为值 variableSize 应被视为“旧世界”动态大小数组数据类型。
请注意,[TPS_SWCT_01641] 无法更深入地了解给定数据类型的细节,因为它有意关注 ApplicationDataType。
有些用例必须在没有相应的 ImplementationDataType 的情况下区分“旧世界”动态大小数组和“新世界”可变大小数组数据类型。
一般来说,如果相应的 ImplementationDataType 定义可用(参见 [TPS_SWCT_01642]),则消歧变得多方面(但不一定更容易)。

通过 ImplementationDataType 定义“旧世界”动态大小数组数据类型
(在解析所有类型引用之后)满足以下所有条件的 ImplementationDataType 应被视为“旧世界”动态大小数组数据类型:
• 属性类别的值设置为 ARRAY
• ImplementationDataType 未定义 属性 dynamicArraySizeProfile
• ImplementationDataType 聚合了一个子元素,其中 – 属性 arraySizeSemantics 存在并设置为值 variableSize – 属性 arraySizeHandling 不存在
• ImplementationDataType.swDataDefProps.baseType 存在且属性 – baseTypeEncoding 存在并设置为值 NONE – baseTypeSize 存在并设置为值 8

总的来说,“旧世界”动态大小数组的定义特征是缺少 ApplicationArrayDataType.dynamicArraySizeProfile 属性的定义。 实施数据类型.dynamicArraySizeProfile。
根据 [constr_1387] 的规定,不支持通过数据转换器传输“旧世界”动态大小数组。 可以使用数据转换器传输的唯一受支持的可变大小数组数据类型是“新世界”可变大小数组。

2.8.1.2 “新世界”可变大小数组
与此相反,对可变大小数组数据类型的第二波支持是由应用软件层本身推动的。
在这里,情况完全不同,因为实际大小不能由任何上下文软件模块确定。 应用程序本身负责在运行时维护可变大小数组数据类型的适当长度。
因此,运行时实际数组大小的规范需要通过用于承载可变大小数组数据类型的数据类型的结构来反映。

通过 ApplicationArrayDataType 定义“新世界”可变大小数组数据类型
满足以下所有条件的 ApplicationArrayDataType 应被视为“新世界”动态大小数组数据类型。
• ApplicationArrayDataType 定义属性ApplicationArrayDataType.dynamicArraySizeProfile。
• ApplicationArrayDataType 聚合了一个定义属性ApplicationArrayElement.arraySizeHandling 的ApplicationArrayElement。

通过 ImplementationDataType 定义“新世界”可变大小数组数据类型
满足以下所有条件的 ImplementationDataType 应被视为“新世界”动态大小数组数据类型。
• ImplementationDataType 定义了属性 ImplementationDataType.dynamicArraySizeProfile。
• ImplementationDataType 聚合一个 ImplementationDataTypeElement,该元素定义属性 ImplementationDataTypeElement.arraySizeHandling。
与上述第一个用例相反,应用程序驱动的 VariableSize 数组数据类型不能在数组数据类型的基本类型方面进行限制,即将底层数据类型限制为长度正好为一个字节的无符号整数数据类型不是一个选项。
除此之外,还需要多种可能的可变大小数组数据类型结构。 这方面在图 2.10 中进行了描述。



用于定义可变大小数组数据类型的配置文件定义
可变大小数组数据类型的可能变体有:
线性 可变大小数组数据类型本身的元素数据类型不包含可变大小数组数据类型。 这种情况对应于图 2.10 中的标签 (a)。
这种情况对应于属性 dynamicArraySizeProfile 的可能值 VSA_LINEAR。
Square 可变大小数组数据类型本身的元素数据类型由可变大小数组数据类型组成,其中所有“二阶”数组中的最大元素数与“一阶”中的最大元素数相同。 这种情况对应于图 2.10 中的标签 (b)。
这种情况对应于属性 dynamicArraySizeProfile 的可能值 VSA_SQUARE。
矩形 可变大小数组数据类型本身的元素数据类型由可变大小数组数据类型数据类型组成,其中“二阶”数组中元素的最大数量相同,但该值通常与最大值不同 “一阶”数组中的元素数。 这种情况对应于图 2.10 中的标签 (c)。
这种情况对应于属性 dynamicArraySizeProfile 的可能值 VSA_RECTANGULAR。
完全灵活 可变大小数组数据类型本身的元素数据类型由可变大小数组数据类型组成,其中“二阶”数组中的最大元素数不一定彼此相同,并且(显然)不一定 与“一阶”数组中的最大元素数相同。 这种情况对应于图 2.10 中的标签 (d)。
这种情况对应于属性 dynamicArraySizeProfile 的可能值 VSA_FULLY_FLEXIBLE。
请注意,可变大小数组数据类型中的叶元素不必是原始数据类型。 如前所述,可以定义多维可变大小数组数据类型。
“终端”元素可以被识别为它们不建立进一步的可变大小数组数据类型。
这部分主要看了可变数组概要部分以及用例,对于可变维度数组的基本情况有了一点了解。对于实现方式也有了一些认识。
















