全部学习汇总: https://github.com/GreyZhang/hack_autosar
继续学习AUTOSAR,死磕官方文档。
5.2.2 数据类型映射
如上所述,应用数据类型的概念以及实现数据类型的概念可用于实例化 M1 模型中的数据原型。 然而,有一些用例,特别是为了为 ApplicationSwComponentTypes 生成 RTE 合同,需要考虑一个给定数据原型的两个级别。
DataTypeMap
这是由元类 DataTypeMap 支持的,通过它可以将 ApplicationDataType 和 ImplementationDataType 相互映射,以便描述一个 dataElement 的两个方面。
表格内容其实跟前面大同小异。
例如,如果 SenderReceiverInterface 中的 dataElement 是由 ApplicationDataType 类型化的,则它应另外关联到 ImplementationDataType,以便能够生成 RTE。
ModeRequestTypeMap
另一个映射类 ModeRequestTypeMap 已被引入,以允许通过“正常”发送方-接收方通信传输模式相关信息。 除此之外,模式信息不是由通常的类型系统处理的,而是需要特殊的元类。
这在第 4.2.5 章中有更详细的解释。
请注意,出于流程原因引入了映射类而不是直接关联:它允许在没有直接链接的情况下在单独的 M1 工件中维护应用程序和实现类型。
例如,如果将软件组件移至另一个硬件平台,则应用程序和实现类型之间的映射可能会在特定组件的范围内更改,而不会更改整个 VFB 模型。
映射的 ApplicationDataType 和 ImplementationDataType 应兼容
为了在 ApplicationDataType 和 ImplementationDataType 之间建立一个有效的 DataTypeMap,这两种类型应该是兼容的。
这将在第 6.2.5 章中进一步解释。 当然,如果 ImplementationDataTypes 是从现有的 ApplicationDataTypes 生成的,则预计它们将自动兼容。
此外,各种映射都聚合在一个容器 DataTypeMappingSet 中,以便于在工件中进行维护。
此类表示 ApplicationDataTypes 和 ImplementationDataTypes 之间的映射列表。 此外,它还可以包含 ImplementationDataTypes 和 ModeDeclarationGroups 之间的映射。
请注意,元类 AutosarDataType、ModeDeclarationGroup 和 DataTypeMappingSet 派生自 ARElement。 这意味着这些和从它们派生的元类可以在 M1 级别上声明为 ARPackage 的一部分,因此可以在几个不同的软件组件或基本软件模块描述中使用。
如何为软件系统组织 DataTypeMappingSets,例如每个 ECU 或什至每个软件组件是否有单独的映射集,被视为特定于项目。 然而,RTE 生成器需要一个定义良好的 DataTypeMappingSet 作为输入,这些工件可能定义类型为 ApplicationDataTypes 的数据。
与 DataTypeMappingSet 关联的元类
因此,本文档范围内的以下元类与 DataTypeMappingSet 有关联:
• InternalBehavior,因为它表示软件组件的代码和 RTE 之间的接口,并且属于特定组件类型的所有数据类型必须是唯一的 在实施层面提供。
• ParameterSwComponentType,出于同样的原因(该组件类型没有 InternalBehavior)。
• NvBlockDescriptor,因为这个元类也导致从数据类型生成代码并且与InternalBehavior 无关。
• CompositionSwComponentType,支持CompositionSwComponentType 上下文中ComSpecs 的定义。 请注意,数据类型映射的这个定义是非正式的(即,它应被视为对尚未被 DelegationSwConnector 或 PassThroughSwConnector 引用的委托 PortPrototype 的提示),不应被视为对内部元素的约束性合同 CompositionSwComponentType。
应用程序和实现类型之间的映射不一定必须形成 1:1 的关系
通常,给定系统中ApplicationDataType 和ImplementationDataType 之间的所有映射的总和不需要形成1:1 的关系。 根据用例和范围,1:n 和 n:1 映射是可能的:
• 几个不同的 ApplicationDataType 可以映射到系统、ECU 甚至单个 InternalBehavior 范围内的相同 ImplementationDataType。 一个原子软件组件。
当然,这要求不同的 ApplicationDataType 用于不同的 DataPrototype,因此 DataPrototype 由它们(而不是 ImplementationDataType)进行类型化。 这允许在实现级别建立比在应用程序模型级别更简单的类型系统。
• 对于不同的ECU,相同的ApplicationDataType 可以映射到不同的ImplementationDataType。 该场景允许根据特定 ECU 的需求选择实现数据类型。
ApplicationDataType 的映射
即使在单个 ECU(更准确地说,单个 RTE)的范围内,但不在单个原子软件组件的范围内,相同的 ApplicationDataType 也可以映射到不同的 ImplementationDataType。
这提高了独立开发或在 ECU 之间移植的软件组件的可移植性。
映射到相同 ApplicationDataType 的 ImplementationDataType 的兼容性
要求用于连接PortInterfaces的相应元素并因此引用兼容的ApplicationDataTypes的ImplementationDataTypes也相互兼容(以便RTE能够通过相应地转换数据来处理可能的连接)。
这部分主要是看了数据类型的mapping介绍,而mapping中一个核心的处理问题就是一致性以及兼容性的考量。