949_AUTOSAR_TPS_SoftwareComponentTemplate35_数据类型实现1

       全部学习汇总: https://github.com/GreyZhang/hack_autosar

       继续学习AUTOSAR,距离最初的启航已经听过了感觉有一丝漫长的时光了。这锅汤还得细火慢炖才能够出味。

949_AUTOSAR_TPS_SoftwareComponentTemplate35_数据类型实现1

       5.2.5实施数据类型

       引入了ImplementationDataType 以优化在实现级别上对数据类型处理的正式支持

       引入了ImplementationDataType 的概念以优化对实现级别上的数据类型处理的正式支持。

       也就是说,ImplementationDataType 在概念上对应于 (C) 源代码的级别。 例如,ImplementationDataTypes 对软件组件和 RTE 的合同(请在 [2] 中找到该术语的解释)有直接影响。

949_AUTOSAR_TPS_SoftwareComponentTemplate35_数据类型实现1

949_AUTOSAR_TPS_SoftwareComponentTemplate35_数据类型实现1

       表 5.18:ImplementationDataType 允许的属性与类别

949_AUTOSAR_TPS_SoftwareComponentTemplate35_数据类型实现1

       类别的有限值集适用于 ImplementationDataType

     与任何 AutosarDataType 一样,实现级别的数据类型也以其类别和 SwDataDefProps 为特征。 对于给定的类别,只有 SwDataDefProps 的一组有限属性才有意义。

949_AUTOSAR_TPS_SoftwareComponentTemplate35_数据类型实现1

       SwDataDefProps 适用于 ImplementationDataTypes

       表 5.18 中显示了给定类别允许的 SwDataDefProps 和其他属性及其多重性的完整列表。

       该列表使用了 SwDataDefProps 和其他元模型元素,这些元素将在本章的其他部分进行详细说明。

949_AUTOSAR_TPS_SoftwareComponentTemplate35_数据类型实现1

       属性 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。

949_AUTOSAR_TPS_SoftwareComponentTemplate35_数据类型实现1

       ImplementationDataType可以表示应用程序级别上不可用的概念

       作为特定关注点的结果,可以使用应用程序级别不支持的ImplementationDataType来表达概念,即通过ApplicationDataType:

       •ImplementationDataType支持指针的定义

       •可以定义“别名”名称与typedef中的名称相同

       •可以定义嵌套的实现数据类型,但与为ApplicationDataType实现的概念不同,这些实现了子元素的直接聚合,而不是应用类型原型模式。

       ImplementationDataType的一般结构如图5.11所示。如果假定特定的ImplementationDataType定义复合数据类型,则ImplementationDataType将聚合ImplementationDataTypeElements。

949_AUTOSAR_TPS_SoftwareComponentTemplate35_数据类型实现1

949_AUTOSAR_TPS_SoftwareComponentTemplate35_数据类型实现1

949_AUTOSAR_TPS_SoftwareComponentTemplate35_数据类型实现1

       描述实现级别上的可重用数据类型。这通常与C代码中的typedef相对应。

949_AUTOSAR_TPS_SoftwareComponentTemplate35_数据类型实现1

       规则适用于属性ImplementationDataType.typeEmitter的使用

       以下规则适用于属性ImplementationDataType.typeEmitter 的使用:

       • 如果属性typeEmitter 的值未定义并且提供了nativeDeclaration,则RTE 生成器应生成相应的数据类型定义7。

       • 如果属性typeEmitter 的值设置为“RTE”并且提供了nativeDeclaration,则RTE 生成器应生成相应的数据类型定义。

       • 如果属性typeEmitter 的值设置为“RTE”且未提供nativeDeclaration,则RTE 生成器应发出错误消息。

       • 如果属性 typeEmitter 的值设置为除“RTE”以外的任何其他值,则无论 nativeDeclaration 属性是否存在,RTE 生成器都应静默地不生成相应的数据类型定义

.      请注意,上面列出的规则意味着属性类型 Emitter 的允许值不受单一例外的约束,即 AUTOSAR 声明了“RTE”情况下的行为定义。 可以提供其他值; 此规定的后果取决于实现,并且超出了 AUTOSAR 标准定义的范围

. 949_AUTOSAR_TPS_SoftwareComponentTemplate35_数据类型实现1

       实现数据类型的嵌套定义

       如果ImplementationDataTypeElement 还表示复合数据类型,则它可以在subElement 的角色中聚合ImplementationDataTypeElements。 同样,类型原型模式不适用于这种情况。

       结构应至少有一个元素

       类别 STRUCTURE 的 ImplementationDataType 或 ImplementationDataTypeElement 应至少拥有一个 ImplementationDataTypeElement。

949_AUTOSAR_TPS_SoftwareComponentTemplate35_数据类型实现1

       联合应至少有一个元素

       类别 UNION 的 ImplementationDataType 或 ImplementationDataTypeElement 应至少拥有一个 ImplementationDataTypeElement。

949_AUTOSAR_TPS_SoftwareComponentTemplate35_数据类型实现1

       声明一个本地聚合的数据对象。 此类元素只能在其聚合的范围内使用。 该元素要么包含更多子元素,要么通过其 swDataDefProps 进一步定义。 在ImplementationDataTypes 系统中,有几个用例提供这样的局部声明:

       • 它可以表示一个数组的元素,定义元素类型和数组大小

       • 它可以表示一个结构的元素,定义它的类型

       • 它可以是调试元素的本地声明

949_AUTOSAR_TPS_SoftwareComponentTemplate35_数据类型实现1

       具有数组语义的实现数据类型

       当然,也可以定义一个提供数组语义的ImplementationDataType。

949_AUTOSAR_TPS_SoftwareComponentTemplate35_数据类型实现1

       ImplementationDataType.subElement.arraySize 用于定义数组的大小

       原始属性 ImplementationDataType.subElement.arraySize 将用于定义数组的大小。

949_AUTOSAR_TPS_SoftwareComponentTemplate35_数据类型实现1

       数组索引的语义

       对于实现数组数据类型的 ImplementationDataType,数组索引的语义是:

       • 它应从值 0 开始

       • 它应运行到 arraySize -1 的值

949_AUTOSAR_TPS_SoftwareComponentTemplate35_数据类型实现1

       arraySize 的值

       类别ARRAY的ImplementationDataType或ImplementationDataTypeElement拥有的ImplementationDataTypeElement的属性arraySize的值应大于0。

949_AUTOSAR_TPS_SoftwareComponentTemplate35_数据类型实现1

       数组大小定义为ImplementationDataTypeElement的属性

       请注意,数组大小没有定义为代表整个数组的ImplementationDataType的属性。它实际上定义为描述数组元素的ImplementationDataTypeElement的一个属性(请注意,ApplicationArrayDataType中使用了相同的模式)。

       因此,如果一个“struct”元素表示一个数组,那么这个特定的struct元素由类别数组的ImplementationDataTypeElement给出,该类别数组反过来聚合另一个ImplementationDataTypeElement,例如表示数组元素并包含大小的类别值。

       这一次的小结先到此位置,这次主要看了一部分数据类型的实现,后面针对这部分还要继续去梳理。

上一篇:974_AUTOSAR_TPS_SoftwareComponentTemplate54_应用数据类型与实施数据类型的兼容性


下一篇:AutoSAR OS【OS任务类型和一致性类】