全部学习汇总: https://github.com/GreyZhang/hack_autosar
继续学习AUTOSAR,距离最初的启航已经听过了感觉有一丝漫长的时光了。这锅汤还得细火慢炖才能够出味。
5.2.5实施数据类型
引入了ImplementationDataType 以优化在实现级别上对数据类型处理的正式支持
引入了ImplementationDataType 的概念以优化对实现级别上的数据类型处理的正式支持。
也就是说,ImplementationDataType 在概念上对应于 (C) 源代码的级别。 例如,ImplementationDataTypes 对软件组件和 RTE 的合同(请在 [2] 中找到该术语的解释)有直接影响。
表 5.18:ImplementationDataType 允许的属性与类别
类别的有限值集适用于 ImplementationDataType
与任何 AutosarDataType 一样,实现级别的数据类型也以其类别和 SwDataDefProps 为特征。 对于给定的类别,只有 SwDataDefProps 的一组有限属性才有意义。
SwDataDefProps 适用于 ImplementationDataTypes
表 5.18 中显示了给定类别允许的 SwDataDefProps 和其他属性及其多重性的完整列表。
该列表使用了 SwDataDefProps 和其他元模型元素,这些元素将在本章的其他部分进行详细说明。
属性 ImplementationDataType.swDataDefProps.compuMethod 的适用类别
参考 ImplementationDataType.swDataDefProps.compuMethod 的定义仅限于类别 BITFIELD_TEXTTABLE 或类别 TEXTTABLE 的 CompuMethod(在某些情况下,这些可能被视为特定于实现)。
类别 TYPE_REFERENCE 的 ImplementationDataTypes 的 CompuMethod 和 DataConstr 的存在
类别TYPE_REFERENCE的ImplementationDataTypes的ImplementationDataType.swDataDefProps.compuMethod和ImplementationDataType.swDataDefProps.dataConstr的存在仅当相应的ImplementationDataType在解析所有类型引用后以类别VALUE的ImplementationDataType结束时才允许。
请注意,由于 [constr_1383] 的存在,复合 ImplementationDataType 的元素可能定义了单独的 CompuMethods。 但是,不支持定义一个适用于整个复合 ImplementationDataType 的 CompuMethod。
ImplementationDataType可以表示应用程序级别上不可用的概念
作为特定关注点的结果,可以使用应用程序级别不支持的ImplementationDataType来表达概念,即通过ApplicationDataType:
•ImplementationDataType支持指针的定义
•可以定义“别名”名称与typedef中的名称相同
•可以定义嵌套的实现数据类型,但与为ApplicationDataType实现的概念不同,这些实现了子元素的直接聚合,而不是应用类型原型模式。
ImplementationDataType的一般结构如图5.11所示。如果假定特定的ImplementationDataType定义复合数据类型,则ImplementationDataType将聚合ImplementationDataTypeElements。
描述实现级别上的可重用数据类型。这通常与C代码中的typedef相对应。
规则适用于属性ImplementationDataType.typeEmitter的使用
以下规则适用于属性ImplementationDataType.typeEmitter 的使用:
• 如果属性typeEmitter 的值未定义并且提供了nativeDeclaration,则RTE 生成器应生成相应的数据类型定义7。
• 如果属性typeEmitter 的值设置为“RTE”并且提供了nativeDeclaration,则RTE 生成器应生成相应的数据类型定义。
• 如果属性typeEmitter 的值设置为“RTE”且未提供nativeDeclaration,则RTE 生成器应发出错误消息。
• 如果属性 typeEmitter 的值设置为除“RTE”以外的任何其他值,则无论 nativeDeclaration 属性是否存在,RTE 生成器都应静默地不生成相应的数据类型定义
. 请注意,上面列出的规则意味着属性类型 Emitter 的允许值不受单一例外的约束,即 AUTOSAR 声明了“RTE”情况下的行为定义。 可以提供其他值; 此规定的后果取决于实现,并且超出了 AUTOSAR 标准定义的范围
.
实现数据类型的嵌套定义
如果ImplementationDataTypeElement 还表示复合数据类型,则它可以在subElement 的角色中聚合ImplementationDataTypeElements。 同样,类型原型模式不适用于这种情况。
结构应至少有一个元素
类别 STRUCTURE 的 ImplementationDataType 或 ImplementationDataTypeElement 应至少拥有一个 ImplementationDataTypeElement。
联合应至少有一个元素
类别 UNION 的 ImplementationDataType 或 ImplementationDataTypeElement 应至少拥有一个 ImplementationDataTypeElement。
声明一个本地聚合的数据对象。 此类元素只能在其聚合的范围内使用。 该元素要么包含更多子元素,要么通过其 swDataDefProps 进一步定义。 在ImplementationDataTypes 系统中,有几个用例提供这样的局部声明:
• 它可以表示一个数组的元素,定义元素类型和数组大小
• 它可以表示一个结构的元素,定义它的类型
• 它可以是调试元素的本地声明
具有数组语义的实现数据类型
当然,也可以定义一个提供数组语义的ImplementationDataType。
ImplementationDataType.subElement.arraySize 用于定义数组的大小
原始属性 ImplementationDataType.subElement.arraySize 将用于定义数组的大小。
数组索引的语义
对于实现数组数据类型的 ImplementationDataType,数组索引的语义是:
• 它应从值 0 开始
• 它应运行到 arraySize -1 的值
arraySize 的值
类别ARRAY的ImplementationDataType或ImplementationDataTypeElement拥有的ImplementationDataTypeElement的属性arraySize的值应大于0。
数组大小定义为ImplementationDataTypeElement的属性
请注意,数组大小没有定义为代表整个数组的ImplementationDataType的属性。它实际上定义为描述数组元素的ImplementationDataTypeElement的一个属性(请注意,ApplicationArrayDataType中使用了相同的模式)。
因此,如果一个“struct”元素表示一个数组,那么这个特定的struct元素由类别数组的ImplementationDataTypeElement给出,该类别数组反过来聚合另一个ImplementationDataTypeElement,例如表示数组元素并包含大小的类别值。
这一次的小结先到此位置,这次主要看了一部分数据类型的实现,后面针对这部分还要继续去梳理。