(ver: 19-11)AUTOSAR_TPS_ManifestSpecification(第3章:3 Application Design(1~3节))

AUTOSAR AP的版本为: 19-11

因为pdf文档一共八百多页,只有13章的样子,因此基本平均每章都有一百多页,都很长,所以在这里将其拆分开来记录。

3 Application Design

3.1 Overview

本章描述了适用于在AUTOSAR自适应平台上创建应用程序软件的所有与设计相关的建模。这也扩展到AUTOSAR经典平台上使用的现有建模的扩展,例如引入属性类别的新值。

特别是,本节将重点介绍以下几个方面:

  • AUTOSAR自适应平台SwComponentType专用子类的定义(section 3.2) 。
  • AUTOSAR自适应平台专用数据类型的定义(section 3.3)。
  • 服务接口是面向服务通信的关键要素 (section 3.4)。
  • 服务接口映射作为内部和外部通信之间的中介 (section 3.5)。
  • 服务接口元素映射作为内部和外部通信之间的中介 (section 3.6)。
  • 持久接口作为与持久数据存储交互的基础(section 3.8)。
  • 从软件组件内部看与“外部世界”交互的细粒度配置(section 3.13)。
  • Executable作为最小可执行单元(section 3.14)。
  • 转换属性的配置(section 3.16)。

3.2 Software Component

原则上,可以直接接管ApplicationSwComponentType的定义,以便在AUTOSAR自适应平台上使用。但是,这会使关于AUTOSAR自适应平台专有的模型元素(例如:数据类型,如第3.3节中所述)的存在的约束条件的制定变得复杂。因此,AdaptiveApplicationSwComponentType被定义为AUTOSAR自适应平台上软件组件的表示。

AdaptiveApplicationSwComponentType的存在提供了一种便捷的方法(请参见[constr_1492]),从而可以从AUTOSAR自适应平台上的使用中锁定为AUTOSAR经典平台定义的大多数软件组件。

相反方向的澄清(即AdaptiveApplicationSwComponentType的错误使用)不太明显。

换句话说,可以在系统中使用AdaptiveApplicationSwComponentType作为AUTOSAR经典平台和AUTOSAR自适应平台上软件的某种总体设计模型。

但是,到目前为止,这一方面还没有得到澄清,也没有限制AdaptiveApplicationSwComponentType出现在系统上下文中。本规范的较新版本可能会修复缺少的规则。

Class AdaptiveApplicationSwComponentType
PackageM2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::ApplicationStructure
Note这个元类表示在AUTOSAR自适应平台上支持应用软件形式化建模的能力。因此,只能在AUTOSAR自适应平台上使用。
Tags: atp.Status = draft
    atp.recommendedPackage=AdaptiveApplicationSwComponentTypes
BaseARElement, ARObject, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType, CollectableElement, Identifiable, MultilanguageReferrable, PackageableElement, Referrable, SwComponentType
AttributeTypeMult.KindNote
internalBehaviorAdaptiveSwcInternal Behavior0..1aggr此聚合表示AUTOSAR自适应平台的
AdaptiveApplicationSwComponentType的内部行为。
Stereotypes:  atpSplitable; atpVariation
Tags: atp.Splitkey=internalBehavior, variationPoint.shortLabel
    atp.Status=draft
    vh.latestBindingTime=preCompileTime
Table 3.1: AdaptiveApplicationSwComponentType
Class AdaptiveSwcInternalBehavior
PackageM2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::AdaptiveInternalBehavior
Note这个元类表示定义AUTOSAR自适应平台上使用的AtomicSwComponentType的内部行为的能力
请注意,本例中的内部行为模型与AUTOSAR经典平台的情况形成鲜明对比,是非常小的
Tags: atp.Status = draft
BaseARObject, Identifiable, MultilanguageReferrable, Referrable
AttributeTypeMult.KindNote
serviceDependencySwcServiceDependency*aggr这表示AdaptiveInternalBehavior拥有的SwcServiceDependencys的集合
Tags: atp.Status=draft
Table 3.2: AdaptiveSwcInternalBehavior

3.3 Data Type

3.3.1 Overview

AUTOSAR自适应平台上的数据类型规范遵循与AUTOSAR经典平台上的数据类型相同的模式:数据类型定义在不同的抽象级别上,这些抽象级别相互补充。在本文中,重点讨论ApplicationDataTypes和cpppimplementationdatatypes。

一般来说,关于数据类型定义的大多数概念可以从AUTOSAR经典平台上的现有规范中获得。但是,某些方面是AUTOSAR自适应平台特有的,因此在本文档的范围内进行了讨论,而不是AUTOSAR软件组件模板的规范[1]。

可以从AUTOSAR经典平台沿用的方面之一是初始值的定义。虽然初始值的效用在AUTOSAR自适应平台上肯定是有限的,但是在所谓的Fields的上下文中有机会利用初始值的定义(参见[TPS_MANI_01034])。

3.3.2 ApplicationDataType

AUTOSAR经典平台支持的ApplicationDataTypes的完整建模范围也可以直接用于AUTOSAR自适应平台。

除了AUTOSAR经典平台支持的ApplicationDataTypes之外,还有更多的ApplicationDataTypes(原则上也可以在AUTOSAR经典平台上使用)主要用于AUTOSAR自适应平台并为其设计。

Class ApplicationDataType (abstract)
PackageM2::AUTOSARTemplates::SWComponentTemplate::Datatype::Datatypes
Noteapplication data type从应用程序的角度定义数据类型。尤其是当“物理”受限时应该使用它。
ApplicationDataType代表在应用程序模型中看到的一组值,例如度量单位。 它不考虑实现细节,例如位大小,字节序等。
应该可以只使用ApplicationData类型对VFB系统的应用程序级方面进行建模。
BaseARElement, ARObject, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType, AutosarDataType, CollectableElement, Identifiable, MultilanguageReferrable, PackageableElement, Referrable
SubclassesApplicationCompositeDataType, ApplicationPrimitiveDataType
AttributeTypeMult.KindNote
-----
Table 3.3: ApplicationDataType
3.3.2.1 String Data Type

虽然对于表示文本字符串的数据类型的处理与AUTOSAR经典平台和AUTOSAR自适应平台上ApplicationDataTypes的定义非常相似,但对于AUTOSAR自适应平台上cpppimplementationdatatypes的级别,有特殊的规定。

有关在cpppimplementationdatatype级别上对字符串数据类型建模的更多信息,请参阅第3.3.3.4节。

为了保持一致性,本章总结了ApplicationDataTypes的建模,以便对AUTOSAR自适应平台所涉及的表示文本字符串的数据类型进行建模。

用于定义类别STRING的ApplicationPrimitiveDataType的元类如图3.1所示。
Specification of textual strings

Figure 3.1: Specification of textual strings

请注意,由于使用的编程语言的数据类型比普通C语言更丰富,因此在AUTOSAR自适应平台上为给定的语言绑定预定义了类别字符串的ApplicationPrimitiveDataType的实现。

[TPS_MANI_01047]{DRAFT} 存在类别STRING的ApplicationPrimitiveDataType的SwRecordLayout:对于在AUTOSAR自适应平台上使用类别STRING的ApplicationPrimitiveDataType,存在applicationionPrimitiveDataType.swDataDefProps. 应忽略swRecordLayout。(RS_MANI_00016)

请注意**[TPS_MANI_01047]**故意不禁止SwRecordLayout的存在,是因为同一个类别STRING的ApplicationPrimitiveDataType可以在AUTOSAR自适应平台和AUTOSAR经典平台上都能正确地使用。

Class ApplicationPrimitiveDataType
PackageM2::AUTOSARTemplates::SWComponentTemplate::Datatype::Datatypes
Note基本数据类型定义了一组允许的值。
Tags:atp.recommendedPackage=ApplicationDataTypes
BaseARElement, ARObject, ApplicationDataType, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType, AutosarDataType, CollectableElement, Identifiable, MultilanguageReferrable, PackageableElement, Referrable
AttributeTypeMult.KindNote
-----
Table 3.4: ApplicationPrimitiveDataType
Class SwTextProps
PackageM2::MSR::DataDictionary::DataDefProperties
Note这个元类表示适用于变量或校准参数中字符串的特定属性。
Tags:atp.recommendedPackage=ApplicationDataTypes
BaseARObject
AttributeTypeMult.KindNote
arraySizeSemanticsArraySizeSemanticsEnum1attr此属性控制表示实现数据类型中字符串的数组的数组大小的语义。
它支持ApplicationDatatype和ImplementationDatatype之间的安全转换,
即使是需要的可变长度字符串,例如支持SAE J1939
baseTypeSwBaseType0..1ref这是字符串中一个字符的基类型。特别是,此baseType表示
ApplicationData类型级别上字符串中字符的预期编码
Tags:xml.sequenceOffset=30
swFillCharacterInteger0..1attr填充最大长度swMaxTextSize的文本参数的填充字符
该值将根据数据对象的相关基类型中指定的编码进行解释,
例如0x30(十六进制)表示ASCII字符零作为填充字符,
0(十进制)表示字符串的结束作为填充字符
填充字符的使用取决于数组化语义。
Tags:xml.sequenceOffset=40
swMaxTextSizeInteger1attr指定最大文本大小(以字符为单位)。注意字节的大小取决于相应基类型中的编码。
Stereotypes:atpVariation
Tags:
vh.latestBindingTime=preCompileTime
xml.sequenceOffset=20
Table 3.5: SwTextProps
3.3.2.2 Associative Map Data Type

[TPS_MANI_01027]{DRAFT} ApplicationAssocMapDataType的语义: ApplicationAssocMapDataType表示关联数据结构,即所谓的键(形式化为ApplicationAssocMapDataType.key,依次由ApplicationDataType键入)与值(形式化为ApplicationAssocMapDataType.value,也由ApplicationDataType键入)关联的数据结构。(RS_MANI_00016)

[constr_3349] {DRAFT}ApplicationAssocMapDataType的使用是受到限制的: ApplicationAssocMapDataType的使用仅限于在可执行文件上下文中定义的AdaptiveApplicationSwComponentTypes和CompositionSwComponentTypes的上下文,即此类数据类型不应在AUTOSAR classic平台上使用。

[constr_3349] 是一种形式化的方法,用于表示ApplicationAssocMapDataType只能在AUTOSAR自适应平台上使用。

[TPS_MANI_01016]{DRAFT}ApplicationAssocMapDataType 的类别:ApplicationAssocMapDataType.category 的值应设置为属性的关联映射(ASSOCIATIVE_MAP)。

图3.2描述了ApplicationAssocMapDataType的结构示例。

如图3.2所示,分类图的ApplicationDataType的概念不应与ApplicationAssocMapDataType混淆。
ApplicationAssocMapDataType
在运行时使用关联数据结构有许多技术含义,例如,在整个数据结构的上下文中,每个键的内容应是唯一的。另一方面,如果值端的内容包含重复项,则完全没有问题,例如,两个唯一键与具有完全相同内容的值相关联。但是,这些方面对ApplicationAssocMapDataType的形式化模型没有任何影响,因此本文档中不考虑这些方面。

ApplicationAssocMapDataType的建模有点简单,其动机主要是需要定义键和值的数据类型。

没有假设关联映射的实现的结构可能是什么样子的。例如,在C++(它是目前唯一支持的AutoSar自适应平台上的语言绑定)中,使用关联映射的直接方式是利用容器ara::core::Map(其中实现对客户端程序员不透明)。
ApplicationAssocMapDataType_model

Class ApplicationAssocMapDataType
PackageM2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::ApplicationDataType
Note 一种应用程序的数据类型,它是一个映射,由一个键和一个值组成。
Tags:
atp.Status=draft
atp.recommendedPackage=ApplicationDataTypes
BaseARElement, ARObject, ApplicationCompositeDataType, ApplicationDataType, AtpBlueprint, Atp Blueprintable, AtpClassifier, AtpType, AutosarDataType, CollectableElement, Identifiable, Multilanguage Referrable, PackageableElement, Referrable
AttributeTypeMult.KindNote
keyApplicationAssocMapElement1aggr 用于唯一标识映射值的映射的键元素。
Tags:atp.Status=draft
valueApplicationAssocMapElement1aggr存储与键关联的内容的映射的值元素。
Tags:atp.Status=draft
Table 3.6: ApplicationAssocMapDataType
Class ApplicationAssocMapElement
PackageM2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::ApplicationDataType
Note描述应用程序映射数据类型的元素的属性。
Tags:atp.Status=draft
BaseARObject, ApplicationCompositeElementDataPrototype, AtpFeature, AtpPrototype, DataPrototype, Identifiable, MultilanguageReferrable, Referrable
AttributeTypeMult.KindNote
-----
Table 3.7: ApplicationAssocMapElement

清单3.1提供了一个ApplicationAssocMapDataType的建模草图示例。

图3.4包含模型的相应图形表示。
AssociativeMap_model

Figure 3.4: Example of the model of an associative map
Listing 3.1: Example for the definition of an ApplicationAssocMapDataType
<APPLICATION-ASSOC-MAP-DATA-TYPE>
<SHORT-NAME>MyAssociativeMap</SHORT-NAME>
<KEY>
<SHORT-NAME>MyKey</SHORT-NAME>
<TYPE-TREF DEST="APPLICATION-PRIMITIVE-DATA-TYPE">keyType</TYPE-TREF>
</KEY>
<VALUE>
<SHORT-NAME>MyValue</SHORT-NAME>
<TYPE-TREF DEST="APPLICATION-PRIMITIVE-DATA-TYPE">valueType</TYPE-TREF>
</VALUE>
</APPLICATION-ASSOC-MAP-DATA-TYPE>

<APPLICATION-PRIMITIVE-DATA-TYPE>
<SHORT-NAME>keyType</SHORT-NAME>
<CATEGORY>VALUE</CATEGORY>
</APPLICATION-PRIMITIVE-DATA-TYPE>

<APPLICATION-PRIMITIVE-DATA-TYPE>
<SHORT-NAME>valueType</SHORT-NAME>
<CATEGORY>VALUE</CATEGORY>
</APPLICATION-PRIMITIVE-DATA-TYPE>

但是,需要澄清ApplicationAssocMapDataType的初始化,因为它通常(使用RecordValueSpecification和ArrayValueSpecification的组合)在技术上可以定义多个语义相同的不同结构的ValueSpecifications。

为了使这种不确定因素不符合AUTOSAR标准,通过[constr_1488]阐明了由ApplicationAssocMapDataType类型化的DataPrototype的初始化。

[constr_1488]{DRAFT}初始化由ApplicationAssocMapDataType类型化的数据原型(DataPrototype): 由ApplicationAssocMapDataType类型化的数据原型(DataPrototype)只能由ApplicationAssocMapValueSpecification初始化。

如前所述,有一个语义需求,即关联映射的关键元素需要在一个关联映射容器的上下文中唯一。

显然,模型对运行时发生的事情没有影响。另一方面,对ApplicationAssocMapDataType的初始化有隐含潜在的影响,请参见[constr_1489]

[constr_1489]{DRAFT} ApplicationAssocMapValueSpecification.mapElementTuple.key 的唯一性: 在给定的ApplicationAssocMapValueSpecification上下文中,所有mapElementTuple.key元素的值都应该是唯一的。

ApplicationAssocMapDataType_init

Class ApplicationAssocMapValueSpecification
PackageM2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::ApplicationDataType
Note这个元类表示定义ApplicationAssocMapDataType初始化的能力。
Tags:atp.Status=draft
BaseARObject, CompositeValueSpecification, ValueSpecification
AttributeTypeMult.KindNote
mapElementTuple (ordered)ApplicationAssocMapElementValueSpecification*aggr此聚合表示ApplicationAssocMapValueSpecification元素的初始值。
Tags:atp.Status=draft
Table 3.8: ApplicationAssocMapValueSpecification
Class ApplicationAssocMapElementValueSpecification
PackageM2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::ApplicationDataType
Note这个元类表示定义ApplicationAssocMapDataType的元素初始化的能力。
Tags:atp.Status=draft
BaseARObject
AttributeTypeMult.KindNote
keyValueSpecification1aggr此聚合表示AssociationEventValueSpecification的键(key)部分的初始化。
Tags:atp.Status=draft
valueValueSpecification1aggr此聚合表示AssociationEventValueSpecification的值(value)部分的初始化。
Tags:atp.Status=draft
Table 3.9: ApplicationAssocMapElementValueSpecification
3.3.2.3 Attributes of SwDataDefProps

[constr_1478]{DRAFT}SwDataDefProps适用于AUTOSAR自适应平台专用的ApplicationDataTypes: 表3.10列出了给定类别允许的SwDataDefProps和其他属性及其多重性的完整列表。

[constr_1478]的一个结论是,表3.10仅显示了仅限于AUTOSAR自适应平台的类别值。有关AUTOSAR classic平台上也支持的所有其他类别值,请参阅软件组件模板规范中包含的类似表。

Attributes of SwDataDefPropsRoot Elem.Attribute Existence per Category
ApplicationAssocMapDataTypeApplicationAssocMapElementASSOCIATIVE_MAP
additionalNativeTypeQualifier
annotationxx*
baseType
compuMethod
dataConstr
displayFormatxx0..1
implementationDataType
invalidValue
stepSize
swAddrMethod
swAlignment
swBitRepresentation
swCalibrationAccess
swCalprmAxisSet
swComparisonVariable
swDataDependency
swHostVariable
swImplPolicy
swIntendedResolution
swInterpolationMethod
swIsVirtual
swPointerTargetProps
swRecordLayout
swRefreshTiming
swTextProps
swValueBlockSize
unit
valueAxisDataType
Other Attributes below the Root Element
key: ApplicationAssocMapElementx1
value: ApplicationAssocMapElementx1
Table 3.10: Allowed Attributes vs. category for ApplicationDataTypes

3.3.3 CppImplementationDataType

3.3.3.1 Overview

在AUTOSAR标准中,数据类型代表了整个开发方法中最重要的资产。因此,AUTOSAR实现了一种多层次的数据类型建模方法。所谓的实现数据层(Implementation Data Level)是所描述的一个层次,其目标是在AUTOSAR自适应平台的客厅中(in the parlor of
the AUTOSAR adaptive platform不知道怎么翻译,肯定不能翻译为”客厅“
)建立一个可以称为“语言绑定”的层次上的建模。

对于AUTOSAR经典平台,通过创建Implementation Data type来处理实现数据级别,该数据类型专门用于覆盖C编程语言的数据类型行为。

与AutoSar经典平台相比,AutoSar自适应平台目前不预见C语言的使用,相反(至少在可预见的将来)定义了与C++语言的语言绑定。

因此,有必要提供一种建模方法,在实现数据级的同时,对C++语言的能力进行适当的支持。虽然在技术上可行的是,将实现数据的语义扩展为C++语言绑定的支持,但这将大大降低实现数据的清晰度和表达能力。

因此,添加一个额外的元类系统似乎是合理的,特别是支持使用与C++语言绑定的数据类型。

[TPS_MANI_01166]{DRAFT}cpppimplementationdatatype的语义: 抽象元类cpppimplementationdatatype支持对支持C++语言绑定的数据类型进行专门建模。(RS_MANI_-00039)

[TPS_MANI_03197]{DRAFT}StdCppImplementationDataType 的语义: 元类STDCPPPACTION DATABATYPE支持将被映射到C++语言绑定中的C++标准库特征的数据类型的建模。(RS_MANI_00039)

请注意,为了简化起见,结构(category=STRUCTURE)和类型别名(category=type_REFERENCE)也被建模为StdCppImplementationDataTypes。

[TPS_MANI_03198]{DRAFT}CustomCppImplementationDataType的语义: 元类CustomCppImplementationDataType支持将映射到头文件中声明的C++语言绑定中自定义实现的数据类型的建模。

请注意,customcpppimplementationdatatype的category值受 [constr_1578] 限制。

这意味着只有StdCppImplementationDataTypes才能对原始数据类型和字符串进行建模。原因是AUTOSAR中为SOME/IP和DDS定义的序列化规则是基于标准库定义的数据类型。
CppImplementationDataType

Class CppImplementationDataType (abstract)
PackageM2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::CppImplementationDataType
Note这个元类表示指定一个可重用的数据类型定义的方式,它是C++语言绑定的基础。
Tags:atp.Status=draft
BaseARElement, ARObject, AbstractImplementationDataType, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType, AutosarDataType, CollectableElement, CppImplementationDataTypeContextTarget, Identifiable, MultilanguageReferrable, PackageableElement, Referrable
SubClasses CustomCppImplementationDataType, StdCppImplementationDataType
AttributeTypeMult.KindNote
arraySizePositiveInteger0..1attr如果封闭的CppImplementationDataType具有数组语义,则此属性可用于指定数组大小。
Stereotypes: atpVariation
Tags: vh.latestBindingTime=preCompileTime
namespace(ordered)SymbolProps*aggr此聚合允许定义为封闭的cpppimplementationdata类型提供自己的命名空间。
Tags:atp.Status=draft
subElement(ordered)CppImplementationDataTypeElement*aggr这表示封闭cpppimplementationdatatype的子元素的集合
Tags:atp.Status=draft
templateArgument(ordered)CppTemplateArgument*aggr此聚合允许指定模板参数的属性
Tags:atp.Status=draft
typeEmitterNameToken0..1attr此属性可用于控制如何将相应的CppImplementationDataType贡献给语言绑定。
typeReferenceCppImplementationDataType0..1ref此引用应定义为定义类型引用(也称为typedef)。
Tags:atp.Status=draft
Table 3.11: CppImplementationDataType
Class StdCppImplementationDataType
PackageM2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::CppImplementationDataType
Note该元类表示指定数据类型定义的方式,该数据类型定义是C++语言与C++标准库特征绑定的基础。
Tags:
atp.Status=draft
atp.recommendedPackage=CppImplementationDataTypes
BaseARElement, ARObject, AbstractImplementationDataType, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType, AutosarDataType, CollectableElement, CppImplementationDataType, CppImplementationData TypeContextTarget, Identifiable, MultilanguageReferrable, PackageableElement, Referrable
AttributeTypeMult.KindNote
-----
Table 3.12: StdCppImplementationDataType
Class CustomCppImplementationDataType
PackageM2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::CppImplementationDataType
Note该元类表示指定数据类型定义的方式,该数据类型定义是C++语言与在配置的头文件中声明的自定义实现绑定的基础。此customcpppimplementationdatatype的短名称定义自定义实现的类名(Class-Name)
Tags:
atp.Status=draft
atp.recommendedPackage=CppImplementationDataTypes
BaseARElement, ARObject, AbstractImplementationDataType, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType, AutosarDataType, CollectableElement, CppImplementationDataType, CppImplementationData TypeContextTarget, Identifiable, MultilanguageReferrable, PackageableElement, Referrable
AttributeTypeMult.KindNote
headerFileString1attr使用自定义类声明配置头文件。
Table 3.13: CustomCppImplementationDataType

[constr_1571]{DRAFT}CppImplementationDataType是受限制的: cpppimplementationdatatype的使用仅限于在可执行文件上下文中定义的AdaptiveApplicationSwComponentTypes和compositionswcomponenttypes的上下文。

[TPS_MANI_01167]{DRAFT}AbstractImplementationDataType : 元类CppImplementationDataType继承自抽象基类AbstractImplementationDataType,以便成为来自其他想要引用**“通用 ImplementationDataType”**的其他元类的特定引用的有效目标。(RS_MANI_00039)

Class AbstractImplementationDataType(abstract)
PackageM2::AUTOSARTemplates::CommonStructure::ImplementationDataTypes
Note这个元类表示不同类型ImplementationDataType的抽象基类
BaseARElement, ARObject, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType, AutosarDataType, CollectableElement, Identifiable, MultilanguageReferrable, PackageableElement, Referrable
AttributeTypeMult.KindNote
-----
Table 3.14: AbstractImplementationDataType

在元类DataTypeMap中可以找到一个突出的例子来说明引用 “通用ImplementationDataType ” 的想法。DataTypeMap存在的目的是将ApplicationDataType映射到ImplementationDataType或cppplementationdatatype。

通过建立参考模型DataTypeMap.implementationDataType作为对AbstractImplementationDataType的引用,两个选项都可以在单个角色中使用。
CppImplementationDataType

Figure 3.7: CppImplementationDataType overview

与C语言相反,C++支持程序中命名空间的定义。这个特性也可以在AUTOSAR自适应平台上开发,因此需要在建模方法中表示出来。

[TPS_MANI_01168]{DRAFT}CppImplementationDataType的命名空间规范: 为CppImplementationDataType定义命名空间的能力是通过在角色命名空间中的CppImplementationDataType处聚合SymbolProps 来表示的。(RS_MANI_00039)

[constr_3443]{DRAFT}StdCppImplementationDataType的命名空间规范: 不允许为类别VALUE的StdCppImplementationDataType定义名称空间。 对于类别的此值,已使用StdCppImplementationDataType来假定std名称空间。

[TPS_MANI_01176]{DRAFT}属性CppImplementationDataType.typeEmitter 的标准值: AUTOSAR标准为属性CppImplementationDataType.typeEmitter保留以下值 :

  • TYPE_EMITTER_ARA

最重要的是,AUTOSAR为数据类型定义保留了典型头文件的标准名称,作为CppImplementationDataType.typeEmitter的其他可能值(例如,在Adaptive Platform的平台类型规范中定义的CppImplementationDataTypes的Platform_Types.h)(RS_MANI_00039)

[TPS_MANI_01177]{DRAFT}属性CppImplementationDataType.typeEmitter 的语义: 以下规则适用于属性CppImplementationDataType.typeEmitter的使用:

  • 如果属性typeEmitter设置为值TYPE_EMITTER_ARA ,则ARA生成器应生成相应的数据类型定义。
  • 如果属性typeEmitter被设置为除TYPE_EMITTER_ARA之外的任何值,则ARA生成器将不自动生成相应的数据类型定义。
  • 对于与基本数据类型float(参见 [SWS_APT_00043] )、double(参见 [SWS_APT_00046] )和bool(参见 [SWS_APT_00049] )相对应的CppImplementationDataTypes ,不应定义属性typeEmitter。

(RS_MANI_00039)

[TPS_MANI_01212]{DRAFT}在customcpppimplementationdatatype上下文中使用属性typeEmitter: 属性typeEmitter不必在customcpppimplementationdatatype的上下文中使用。如果使用typeEmitter,则属性的值应设置为包含相应customcpppimplementationdatatype的语言绑定的头文件的名称。(RS_MANI_00039)

[TPS_MANI_01169]{DRAFT}支持模板数据类型: 元类CppImplementationDataType 支持使用引用CppImplementationDataType.TimePlaGuess对C++程序中数据类型定义的模板的使用。模板中参数的顺序很重要,因此templateArgument被建模为有序集合。(RS_MANI_00039)

[TPS_MANI_01174]{DRAFT}角色CppTemplateArgument.templateType中的引用语义: 属性CppTemplateArgument.templateType指定要在语言绑定中模板的相应位置填充的数据类型。(RS_MANI_00039)

[TPS_MANI_01175]{DRAFT}CppTemplateArgument.allocator角色中的引用语义: 属性cpptTemplateArgument.allocator指定要在语言绑定中模板的相应位置填充的分配器类(allocator)的行为。(RS_MANI_00039)

[constr_1576]{DRAFT}CppTemplateArgument.templateType 和CppTemplateArgument.allocator的存在对比: 对于任何给定的CppTemplateArgument,最多只能存在一个引用

  • CppTemplateArgument.templateType 或
  • CppTemplateArgument.allocator

[TPS_MANI_01201]{DRAFT}属性CppTemplateArgument.category的标准化值: AUTOSAR为属性CppTemplateArgument.category保留以下值:

  • ASSOC_MAP_KEY : 特定的CppTemplateArgument表示关联映射的键数据类型。
  • ASSOC_MAP_VALUE :特定的CppTemplateArgument表示关联映射的值数据类型。

(RS_MANI_00039)

Class CppTemplateArgument
PackageM2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::CppImplementationDataType
Note此元类具有为模板参数定义属性的能力
Tags: atp.Status=draft
BaseARObject
AttributeTypeMult.KindNote
allocatorAllocator0..1ref此引用标识适用的分配器。
Tags: atp.Status=draft
categoryCategoryString0..1attr该属性将用于进一步阐明有关CppTemplateArgument的语义。
inplaceBoolean0..1attr此属性指定是在代码生成中使用引用的templateType的shortName,还是在封闭的CppImplementationDataType之外定义类型声明(true),还是将类型定义嵌入在封闭的CppImplementationDataType内,并且忽略shortName(false) 。
templateTypeCppImplementationDataType0..1ref此引用标识语言绑定所需的特定模板参数的数据类型。
Tags: atp.Status=draft
Table 3.15: CppTemplateArgument

[TPS_MANI_01171]{DRAFT}结构化数据类型的建模: 元类CppImplementationDataType支持通过角色subElement中的CppImplementationDataTypeElement的聚合来创建嵌套数据类型。由于结构化数据类型中子元素的顺序很重要,因此将聚合子元素建模为有序集合。(RS_MANI_00039)

请注意,虽然结构的建模是使用cpppimplementationdatatype正式完成的,但实际上只有使用StdCppImplementationDataType才能实现此目的(请参见**[constr_1578]**)

Class CppImplementationDataTypeElement
PackageM2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::CppImplementationDataType
Note声明一个在本地聚合的数据对象。 这样的元素只能在聚合的范围内使用。 CppImplementationDataTypeElement用于表示结构的元素,定义其类型。
Tags: atp.Status=draft
BaseARObject, AbstractImplementationDataTypeElement, AtpClassifier, AtpFeature, AtpStructureElement,CppImplementationDataTypeContextTarget, Identifiable, MultilanguageReferrable, Referrable
AttributeTypeMult.KindNote
isOptionalBoolean0..1attr 此属性表示将封闭的CppImplementationDataTypeElement声明为可选的能力。这意味着,在运行时, CppImplementationDataTypeElement可能有也可能没有有效值,因此应被忽略。 底层运行时软件提供了在通信的发送端将CppImplementationDataTypeElement设置为无效并在接收端确定其有效性的方法。
typeReferenceCppImplementationDataTypeElementQualifier0..1aggr此聚合定义CppImplementationDataTypeElement的类型,并确定在C ++中是否 CppImplementationDataTypeElement在封闭的CppImplementationDataType的内部或外部定义
Tags: atp.Status=draft
Table 3.16: CppImplementationDataTypeElement

请注意,没有支持支持结构化数据类型的“混合”建模的方法,这样C++级的结果数据类型将由C++中的数据类型和C子系统的数据类型组成。

虽然这在技术上在代码级是可能的,但在建模级却需要付出巨大的努力,而且普遍的共识是,对于这种“混合”数据类型没有真正的用例。

C++数据类型系统可以在AutoSar自适应平台的实现上完全取代C++中的“遗留”C数据类型。

[constr_1572]{DRAFT}CppImplementationDataType中SwDataDefProps.implementationDataType的用法: 在cpppimplementationdatatype的范围内,引用CppImplementationDataType.swDataDefProps.implementationDataType 不应存在。

这一方面也由 [Const_1579] 以更通用的形式表达。

由于 [constr_1572] ,类型引用必须在AUTOSAR自适应平台上以不同的方式进行。为此,可提供专门的参考资料。

[TPS_MANI_01172]{DRAFT}CppImplementationDataType范围内类型引用的说明: 引用CppImplementationDataType.typeReference可以用于创建从封闭的CppImplementationDataType到另一个CppImplementationDataType的类型引用。(RS_MANI_00039)

[TPS_MANI_01173]{DRAFT}CppImplementationDataTypeElement范围内类型引用的说明: CppImplementationDataTypeElement.typeReference可用于创建对CppImplementationDataType的引用,该引用应适用于封闭的CppImplementationDataTypeElement。(RS_MANI_00039)

请注意,CppImplementationDataTypeElement.typeReference是实现为允许将inplace属性添加到typeReference的关联类。

Class CppImplementationDataTypeElementQualifier
PackageM2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::CppImplementationDataType
Note此元素将CppImplementationDataTypeElement的类型引用限定为CppImplementationDataType。
Tags: atp.Status=draft
BaseARObject
AttributeTypeMult.KindNote
inplaceBoolean0..1attr此属性定义C ++中CppImplementationDataTypeElement的成员类型是封闭结构内部的嵌入式类型元素(true)还是类型声明是在结构外部定义的
typeReferenceCppImplementationDataType1ref此引用定义类型引用。
Tags: atp.Status=draft
Table 3.17: CppImplementationDataTypeElementQualifier

[TPS_MANI_03196]{DRAFT}属性CppImplementationDataTypeElementQualifier.inplace 的语义: CppImplementationDataTypeElementQualifier.inplace属性定义C ++语言绑定中CppImplementationDataTypeElement的数据类型是否从引用的CppImplementationDataType的名称或属性派生。

具体而言,应遵循以下规则:

  • 如果CppImplementationDataTypeElement.typeReference.inplace设置为False,则在C ++语言绑定中应使用在角色CppImplementationDataTypeElement.typeReference.typeReference中引用的CppImplementationDataType的shortName。
  • 如果CppImplementationDataTypeElement.typeReference.inplace设置为True,则在C ++语言绑定中仅使用在角色CppImplementationDataTypeElement.typeReference.typeReference中引用的CppImplementationDataType的属性,而忽略shortName。

(RS_MANI_00039)

请注意,图3.13显示了一个结构示例,其中一个子元素的typeReference被分类为inplace。

[constr_1659]{DRAFT}使用CppImplementationDataTypeElementQualifier.inplace的限制: 仅当角色CppImplementationDataTypeElementQualifier.typeReference中引用的目标是StdCppImplementationDataType且属性类别设置为以下值中的任意一个时,属性CppImplementationDataTypeElementQualifier.inplace才存在。

  • ARRAY
  • VECTOR
  • ASSOCIATIVE_MAP
  • VARIANT
  • STRUCTURE
  • STRING

[constr_1659]存在的理由:通过应用排除原理,在三种情况下属性CppImplementationDataTypeElementQualifier.inplace不存在:

  • 类别VALUE的StdCppImplementationDataType
  • CustomCppImplementationDataType
  • 类别TYPE_REFERENCE的CppImplementationDataType

它们都不能用作CppImplementationDataTypeElementQualifier.typeReference的目标,其中CppImplementationDataTypeElementQualifier.inplace被设置为True,因为在这些情况下,已经有一个有效的名称可直接用于语言绑定,并且通过using子句可能的间接寻址显然需要一个额外的名称,而该名称在模型中不可用。

毕竟,定义TYPE_REFERENCE的动机与使用属性CppImplementationDataTypeElementQualifier.inplace控制语言绑定的动机正好相反。 因此,这种情况也被排除在外。

[TPS_MANI_03201]{DRAFT}属性CppTemplateArgument.inplace 的语义: CppTemplateArgument.inplace属性定义C ++语言绑定中templateType引用的数据类型是否从引用的CppImplementationDataType的名称或属性派生。

具体来说,应遵循以下规则:

  • 如果CppTemplateArgument.inplace设置为False,则在C ++语言绑定中应使用在角色CppTemplateArgument.templateType中引用的CppImplementationDataType的shortName。
  • 如果CppTemplateArgument.inplace设置为True,则在C ++语言绑定中只能使用在角色CppTemplateArgument.templateType中引用的CppImplementationDataType的属性,而忽略shortName。

(RS_MANI_00039)

[constr_1660]{DRAFT}CppTemplateArgument.inplace的使用限制: 仅当角色CppTemplateArgument.templateType中引用的目标是StdCppImplementationDataType且属性类别设置为以下值中的任意一个时,属性CppTemplateArgument.inplace才存在。

  • ARRAY
  • VECTOR
  • ASSOCIATIVE_MAP
  • VARIANT
  • STRUCTURE
  • STRING

[constr_1660]存在的理由:通过应用排除原理,在三种情况下属性CppTemplateArgument.inplace将不存在:

  • 类别VALUE的StdCppImplementationDataType
  • CustomCppImplementationDataType
  • 类别TYPE_REFERENCE的CppImplementationDataType

它们都不能用作CppTemplateArgument.templateType的目标,其中CppTemplateArgument.inplace设置为True,因为在这些情况下,已经有一个有效的名称可直接用于语言绑定,并且通过using子句可能的间接寻址显然需要模型中不可用的附加名称。

毕竟,定义TYPE_REFERENCE的动机与使用属性CppTemplateArgument.inplace控制语言绑定的动机直接相反。 因此,这种情况也被排除在外。

请注意,对于引用类别STRUCTURE的StdCppImplementationDataType的CppTemplateArgument.templateType而言,属性CppTemplateArgument.inplace的值问题由**[constr_3462]**规范。

[constr_1708]{DRAFT}CppImplementationDataTypeElement.isopolatial和CppImplementationDataTypeElementQualifier.inplace的组合: 如果使用类别STRUCTURE的CppImplementationDataType键入CppImplementationDataTypeElement,则属性的组合
将CppImplementationDataTypeElement.isOptional设置为True,不允许将CppImplementationDataTypeElement.typeReference.inplace设置为True。

[constr_1708]存在的理由:“可选”语义是通过模板实现的,不可能将“ inplace”结构作为模板参数传递。

[constr_3462]{DRAFT}对类别STRUCTURE和inplace标志的StdCppImplementationDataType的CppTemplateArgument.templateType引用: 指向类别STRUCTURE的StdCppImplementationDataType的CppTemplateArgument.templateType必须将inplace属性设置为false。

[constr_3462]的原因是ISO C ++ 11/14/17不允许将未命名结构用作模板参数。

[constr_3446]{DRAFT}带有分配器引用和inplace标志的CppTemplateArgument: 一个带有分配引用的CppTemplateArgument 不应给inplace标志设置一个值。

Class Allocator
PackageM2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::CppImplementationDataType
Note这个元类表示能够影响对象在内存中的分配方式,例如,可以控制对象是在堆上还是在堆栈上分配。
Tags:
atp.Status=draft
atp.recommendedPackage=Allocators
BaseARElement, ARObject, CollectableElement, Identifiable, MultilanguageReferrable, PackageableElement, Referrable
AttributeTypeMult.KindNote
namespace(ordered)SymbolProps*aggr此聚合允许定义分配器的命名空间。
Tags: atp.Status=draft
Table 3.18: Allocator

[TPS_MANI_01100]{DRAFT}Allocator 的语义: 元类Allocator具有定义内存分配属性的能力。内存分配的一般方法是通过属性类别来表示的。

AUTOSAR对以下Allocator.category值进行了标准化:

  • MAX_SIZE_HEAP :使用此分配器时,有意在堆上分配固定大小的块。 该分配器为ara :: core :: Vector的默认分配器的语义增加了定义最大元素数的能力。
  • MAX_SIZE_STACK :使用这个分配器时,打算在堆栈上分配一个固定大小的块。堆栈上的内存总是需要根据最大大小进行限制。换句话说,几乎没有任何情况下应该在堆栈上分配无限量的内存。
  • MAX_SIZE_DATASEGMENT: 当使用这个分配器时,打算在数据段中分配一个固定大小的块。

(RS_MANI_00016)

[constr_1578]{DRAFT}适用的数据类别: 表3.19定义了适用的类别与元类。

  • AADT: ApplicationArrayDataType
  • ARDT: ApplicationRecordDataType
  • APDT: ApplicationPrimitiveDataType
  • ARE: ApplicationRecordElement
  • AAE: ApplicationArrayElement
  • AVS: ApplicationValueSpecification
  • SCDT: StdCppImplementationDataType
  • CCDT: CustomCppImplementationDataType
CategoryApplicable to ...Description
AADTARDTAPDTAREAAEAVSSCDTCCDT
VALUExxxxx包含单个值。另见[TPS_MANI_03192]。
TYPE_REFERENCEx该元素是通过引用另一种数据类型(通过CppImplementationDataType.typeReference来定义的)。
STRUCTURExxxx包含一个或几个其他元素,这些元素可以具有不同的AutosarDataType。 另请参阅[TPS_MANI_03180]
VARIANTxx可以容纳不同数据类型的值。 它与STRUCTURE类似,不同之处在于其所有成员均始于内存中的同一位置
VARIANT数据原型一次只能包含其元素之一,并且代表类型安全的联合。 VARIANT的大小至少是最大成员的大小。 另请参阅[TPS_MANI_03189]。
ARRAYxxxxx固定大小的相同类型子元素数组。 另请参阅[TPS_MANI_03169]。
VECTORxx一系列元素的数组,同时可以在运行时增加长度的数据结构,另请参阅[TPS_MANI_03174]。
ASSOCIATIVE_MAPxx键值对的关联数组。 另请参阅[TPS_MANI_03183]
STRINGxxxxx包含一个文本字符串。 另请参阅[TPS_MANI_03178]
BOOLEANxxxx包含一个布尔状态。 根据CPU的不同,单个位的直接寻址可能不可用。
所以一个字节或一个字只能用来存储一个逻辑状态。
Table 3.19: Usage of category for Data Types
3.3.3.2 Attributes of SwDataDefProps

[constr_1579]{DRAFT}适用于AUTOSAR自适应平台专有的CppImplementationDataTypes的SwDataDefProps: 表3.20列出了给定类别允许的SwDataDefProps和其他属性及其多重性的完整列表。

[Const_1578]的一个结论是,表3.20仅显示了仅限于AUTOSAR自适应平台的类别值。有关AUTOSAR classic平台上也支持的所有其他类别值,请参阅软件组件模板规范[1]中包含的类似表。

  • CIDT: CppImplementationDataType
  • VAL: VALUE
  • TR: TYPE_REFERENCE
  • ST: STRUCTUR
  • VAR: VARIANT
  • AR: ARRAY
  • VEC: VECTOR
  • AMAP: ASSOCIATIVE_MAP
  • STR: STRING
  • d/c: don’t care
Attributes of SwDataDefPropsRootElementAttribute Existence per Category
CIDTVALTRSTVARARVECAMAPSTR
additionalNativeTypeQualifier
annotationx********
baseType
compuMethodx0..10..1
dataConstr.dataConstrRule.physConstrsxd/cd/cd/cd/c
dataConstr.dataConstrRule.internalConstrsx0..10..10..10..1
displayFormatx0..10..10..10..10..10..10..1
implementationDataType
invalidValuex0..10..10..1
stepSize
swAddrMethod
swAlignment
swBitRepresentation
swCalibrationAccess
swCalprmAxisSet
swComparisonVariable
swDataDependency
swHostVariable
swImplPolicy
swIntendedResolution
swInterpolationMethod
swIsVirtual
swPointerTargetProps
swPointerTargetProps.swDataDefProps
swPointerTargetProps.functionPointerSignature
swRecordLayout
swRefreshTimingx0..10..1<0..1<0..1<0..1<0..1<0..1<0..1<
swTextProps
swValueBlockSize
unit
valueAxisDataType
Other Attributes
subElement:CppImplementationDataTypeElementx1..*
templateArgumentx1..*11..*2..*0..1
typeReferencex1
Table 3.20: Allowed Attributes vs. category for CppImplementationDataType
3.3.3.3 Primitive Data Types

[TPS_MANI_03192]{DRAFT}类别VALUE的CppImplementationDataType: 基本数据类型,如布尔型、固定宽度整数数据类型和浮点数据类型被描述为类别VALUE的cpppimplementationdatatypes。(RS_MANI_00039)

[TPS_MANI_03193]{DRAFT}类别TYPE_REFERENCE的CppImplementationDataType: 类别TYPE_REFERENCE的CppImplementationDataType的定义为typeReference引用的另一个CppImplementationDataType创建别名。(RS_MANI_00039)

3.3.3.4 String Data Type

[TPS_MANI_03178]{DRAFT}类别STRING的StdCppImplementationDataType: 类别STRING的StdCppImplementationDataType表示字符序列的容器数据类型。

AUTOSAR要求类别STRING的StdCppImplementationDataType的C ++绑定由ara :: core :: String实现。(RS_MANI_00039)

[constr_1674]{DRAFT}支持类别STRING的StdCppImplementationDataType的编码: 在元模型的级别(以及扩展为语言绑定)上,类别STRING唯一支持的StdCppImplementationDataType编码为UTF-8。

请注意,尽管如此,仍然可以使用不同的编码,例如在SOME/IP消息级别上使用UTF-16。此行为可以通过apsomeipttransformationprops配置。因此,可能必须在线上的字符串表示与软件中的字符串表示之间进行转码。

[TPS_MANI_03179]{DRAFT}类别STRING的StdCppImplementationDataTypes的C ++语言绑定: 类别STRING的CppImplementationDataType应实现为ara::core::String。(RS_MANI_00039)

[TPS_MANI_03179]的表述为以后支持其他存储格式的扩展留出了空间。

图3.8中描述的示例包含ApplicationDataType的定义以及相应的CppImplementationDataType的定义。

显然,由于就C ++语言绑定而言,类别STRING的CppImplementationDataType必须仅基于ara::core::String来实现,因此后者的建模显然要轻得多。
UTF-8_Encoding
图3.8中示例的另一方面是,它在ApplicationPrimitiveDataType的范围内定义了建模数据类型的预期编码。

[TPS_MANI_03188]{DRAFT}类别STRING的StdCppImplementationDataType的分配器的用法: 允许将类别为STRING的StdCppImplementationDataType聚合一个CppTemplateArgument,该CppTemplateArgument引用具有分配器引用的分配器。(RS_MANI_00039)

3.3.3.5 Array Data Type

[TPS_MANI_03169]{DRAFT}具有固定大小的数组语义的CppImplementationDataType: 类别ARRAY的CppImplementationDataType表示封装固定大小数组的容器数据类型。

[TPS_MANI_03170]{DRAFT}类别ARRAY的CppImplementationDataType: 对于C ++绑定,类别ARRAY的CppImplementationDataType可以实现为:

  • 如果使用StdCppImplementationDataType子类,则为:ara::core::Array
  • 如果使用CustomCppImplementationDataType子类,则使用自定义命名空间中的数组类型(例如my :: array)(前提是可以使用可用的建模功能配置自定义命名空间中的类型)

(RS_MANI_00039)

[TPS_MANI_03171]{DRAFT}类别ARRAY的CppImplementationDataType的值类型: 类别ARRAY的CppImplementationDataType中包含的元素类型由聚合的templateArgument和定义了CppTemplateArgument数据类型的相应templateType定义。(RS_MANI_00039)

[constr_3433]{DRAFT}汇总ARRAY的templateArguments: 归纳为ara::core::Array的ARRAY类别的CppImplementationDataType应该精确地聚合一个templateArgument,该模板定义定义ARRAY类别的CppImplementationDataType中包含的元素的类型。

[TPS_MANI_03172]{DRAFT}类别ARRAY的CppImplementationDataType的大小: 类别ARRAY的CppImplementationDataType的原始属性arraySize将用于定义数组的大小。(RS_MANI_00039)

图3.9显示了一个元素类型为uint16的一维数组的示例,其中arraySize = 5。
array_exp
[TPS_MANI_03173]{DRAFT}多维数组的定义: 类别ARRAY的多维CppImplementationDataType包含类别ARRAY的嵌套CppImplementationDataTypes。代表外部数组的类别ARRAY的CppImplementationDataType将通过聚合templateArgument引用代表内部数组的类别ARRAY的CppImplementationDataType。 这样的定义描述了二维数组。 因此,仅嵌套类别ARRAY的更多CppImplementationDataTypes即可描述具有更大尺寸的类型。
数组元素本身由最里面的CppImplementationDataType指定,其类别不同于ARRAY。(RS_MANI_00039)

图3.10显示了一个多维数组的示例,其中arraySize= 5的类别ARRAY的CppImplementationDataType具有一个templateArgument,它指向角色templateType中类别为ARRAY的内部CppImplementationDataType。
内部的CppImplementationDataType具有templateArgument,该参数最终将templateType引用指向原始类型。
multi_array_exp
由于外部数组的CppTemplateArgument.inplace标志设置为true,所以这样的模型将映射为以下C ++代码:

using ArrayRectangularImpl = ara::core::Array<ara::core::Array<uint16_t,10>, 5>;
3.3.3.6 Vector Data Type

[TPS_MANI_03174]{DRAFT}具有可变大小数组语义的cpppimplementationdatatype: 类别VECTOR的CppImplementationDataType表示封装可变大小数组的容器数据类型。(RS_MANI_00039)

[TPS_MANI_03175]{DRAFT}类别VECTOR的CppImplementationDataType: 对于C++绑定,类别VECTOR的CppImplementationDataType 可以实现为:

  • 如果使用StdCppImplementationDataType子类,则为ara::core::Vector。
  • 如果使用CustomCppImplementationDataType子类,则为自定义命名空间中的vector类型(例如my::vector)(前提是可以使用可用的建模功能来配置自定义命名空间中的类型)

(RS_MANI_00039)

[TPS_MANI_03176]{DRAFT}类别VECTOR的CppImplementationDataType的值类型: 类别VECTOR的CppImplementationDataType中包含的元素类型由聚合的templateArgument和定义CppTemplateArgument的数据类型的相应templateType定义。(RS_MANI_00039)

[constr_3434]{DRAFT}VECTOR的templateArguments 聚合: 归结为ara::core::Vector的类别VECTOR的CppImplementationDataType 应该聚合:

  • 一个templateArgument,它使用templateType引用定义类别VECTOR的CppImplementationDataType中包含的元素类型。
  • 可选地,一个附加的templateArgument定义一个引用Alloctor的分配器。

[TPS_MANI_03186]{DRAFT}Vector使用arraySize的用法: 如果类别VECTOR的CppImplementationDataType聚合了定义带有Allocator引用的分配器的templateArgument,则允许使用定义向量的最大大小的属性arraySize。(RS_MANI_00039)

图3.11显示了元素类型为uint16的一维Vector的示例。
vector_exp
[TPS_MANI_03177]{DRAFT}多维Vector的定义: 类别VECTOR的多维CppImplementationDataType包含类别VECTOR的嵌套CppImplementationDataTypes。代表外部Vector的类别VECTOR的CppImplementationDataType将通过聚合templateArgument引用代表内部Vector的类别VECTOR的CppImplementationDataType。这样的定义描述了二维Vector。 因此,通过嵌套更多类别为VECTOR的CppImplementationDataTypes来描述具有更大维数的类型。Vector元素本身由最里面的CppImplementationDataType指定,其类别不同于VECTOR。(RS_MANI_00039)

图3.12显示了一个多维Vector的示例,其中类别VECTOR的CppImplementationDataType具有一个templateArgument,它指向角色templateType中类别VECTOR的内部CppImplementationDataType。 内部的CppImplementationDataType具有templateArgument,该参数最终指向对原始类型的templateType引用。
multi_vector_exp

Figure 3.12: Example of the model of a multidimensional vector

由于没有为内部Vector设置CppTemplateArgument.inplace标志,因此这种模型将映射为以下C ++代码:

using templateArgumentDim1 = ara::core::Vector<uint16_t>;
using DynamicDataArrayImplRectangular = ara::core::Vector<templateArgumentDim1>;

请注意,元模型支持创建对类别VECTOR的CppImplementationDataType的特定元素(通过索引标识)的引用。

但是,如果特定元素在相应的时间点不存在,则这可能会导致运行时出现问题。使用这种数据类型的任何软件都需要为Vector元素的潜在不存在做好准备。或者,可以选择避免类别VECTOR的CppImplementationDataType的元素成为模型中引用目标的情况。

3.3.3.7 Struct Data Type

[TPS_MANI_03180]{DRAFT}Structures 的定义: 类别STRUCTURE的StdCppImplementationDataType表示一种数据类型,用于保存任意数据类型的变量的有序集合。(RS_MANI_00039)

[TPS_MANI_03181]{DRAFT}类别STRUCTURE的StdCppImplementationDataType中的成员定义: 类别STRUCTURE的StdCppImplementationDataType中的成员由有序CppImplementationDataTypeElement定义,这些CppImplementationDataTypeElement 以封闭的类别STRUCTURE的StdCppImplementationDataType的形式聚合在角色subElement中。每个成员的名称由CppImplementationDataTypeElement的shortName定义。每个成员的类型由对CppImplementationDataType的typeReference定义。(RS_MANI_00039)

请注意,[TPS_MANI_03196]中记录了能够对CppImplementationDataTypeElement.typeReference进行分类的inplace标志。

图3.13中描述的示例显示了一个结构的定义,该结构称为MyStruct,它具有两个成员。 带有shortName为ArrayElement的subElements的typeReference使用inplace = True进行分类,并且在该模型之外生成以下struct声明:

struct MyStruct 
{
	ara::core::uint8_t PrimitiveElement;
	ara::core::Array<uint8_t,5> ArrayElement;
};

如果将数组的typeReference中的inplace属性设置为False,则该模型将需要在MyStruct之外使用“using”声明ArrayDataType。

using ArrayDataType = ara::core::Array<uint8_t,5>;

struct MyStruct 
{
	std::uint8_t PrimitiveElement;
 	ArrayDataType ArrayElement;
};

struct_exp

3.3.3.8 Enumeration Data Type

[TPS_MANI_03187]{DRAFT}enumeration 类型的定义: 在AUTOSAR元模型中,枚举不是通过具有自有类别的cpppimplementationdatatype实现的。以作为类别TYPE_REFERENCE 的单个基本CppImplementationDataType的结构描述,它可以归结为类别VALUE的CppImplementationDataType 。通过附有类别TEXTTABLE的CompuMethod,将整数映射到枚举定义范围内的标签视为语义定义的一部分,而不是结构描述的一部分。(RS_MANI_00039)

在类别TEXTTABLE中使用CompuMethod的规则与AUTOSAR Classic Platform中的规则相同,并在软件组件模板中进行了描述。

总而言之,可以在CompuConst的vt中、CompuMethod的适用CompuScale的shortLabel或符号中以文本值的形式提供类别为TEXTTABLE的CompuMethod中的枚举值。

每个CompuScale都应在CompuMethod中定义为compuInternalToPhys计算,并且应包含upperLimit和lowerLimit。

下面的示例演示如何使用computeMethod指定枚举。

Listing 3.2: example for enumeration
<COMPU-METHOD>
<SHORT-NAME>cylinders</SHORT-NAME>
<CATEGORY>TEXTTABLE</CATEGORY>
<COMPU-INTERNAL-TO-PHYS>
<COMPU-SCALES>
<COMPU-SCALE>
<LOWER-LIMIT INTERVAL-TYPE="CLOSED">0</LOWER-LIMIT>
<UPPER-LIMIT INTERVAL-TYPE="CLOSED">0</UPPER-LIMIT>
<COMPU-CONST>
<VT>Cylinder1</VT>
</COMPU-CONST>
</COMPU-SCALE>
<COMPU-SCALE>
<LOWER-LIMIT INTERVAL-TYPE="CLOSED">1</LOWER-LIMIT>
<UPPER-LIMIT INTERVAL-TYPE="CLOSED">1</UPPER-LIMIT>
<COMPU-CONST>
<VT>Cylinder2</VT>
</COMPU-CONST>
</COMPU-SCALE>
<COMPU-SCALE>
<LOWER-LIMIT INTERVAL-TYPE="CLOSED">2</LOWER-LIMIT>
<UPPER-LIMIT INTERVAL-TYPE="CLOSED">2</UPPER-LIMIT>
<COMPU-CONST>
<VT>Cylinder3</VT>
</COMPU-CONST>
</COMPU-SCALE>
<COMPU-SCALE>
<LOWER-LIMIT INTERVAL-TYPE="CLOSED">3</LOWER-LIMIT>
<UPPER-LIMIT INTERVAL-TYPE="CLOSED">3</UPPER-LIMIT>
<COMPU-CONST>
<VT>Cylinder4</VT>
</COMPU-CONST>
</COMPU-SCALE>
</COMPU-SCALES>
</COMPU-INTERNAL-TO-PHYS>
</COMPU-METHOD>
3.3.3.9 Map Data Type

[TPS_MANI_03183]{DRAFT}类别ASSOCIATIVE_MAP 的CppImplementationDataType: 类别ASSOCIATIVE_MAP的cpppimplementationdatatype表示包含具有唯一键的键值对的容器。(RS_MANI_00039)

[TPS_MANI_03184]{DRAFT}类别ASSOCIATIVE_MAP 的CppImplementationDataType: 对于C ++绑定,类别ASSOCIATIVE_MAP的CppImplementationDataType可以实现为:

  • 如果使用StdCppImplementationDataType子类,则为:ara::core::Map
  • 如果使用CustomCppImplementationDataType子类,则使用自定义命名空间中的map类型(例如my :: map)(前提是可以使用可用的建模功能配置自定义命名空间中的类型)

(RS_MANI_00039)

[TPS_MANI_03185]{DRAFT}类别ASSOCIATIVE_MAP的CppImplementationDataType的结构: 归类为ara::core::Map的ASSOCIATIVE_MAP类别的CppImplementationDataType应聚合以下CppTemplateArguments:

  • 第一个CppTemplateArgument应引用具有templateType引用的CppImplementationDataType。此cpptTemplateArgument表示与ApplicationAssocMapDataType.key对应的角色,并定义相应的数据类型详细信息。
  • 第二个CppTemplateArgument应引用具有templateType引用的CppImplementationDataType。此cpptTemplateArgument表示与ApplicationAssocMapDataType.value对应的角色,并定义相应的数据类型详细信息。
  • 可选的第三个CppTemplateArgument应引用具有Allocator引用的分配器。

(RS_MANI_00039)

图3.14中所示的示例显示了一个ASSOCIATIVE_MAP的定义,该定义具有两个CppTemplateArguments,一个用于键,一个用于值。

请注意,CppImplementationDataType的CppTemplateArguments在ARXML中排序的,并且该顺序在对象图中不可见。
map_exp

3.3.3.10 Variant Data Type

[TPS_MANI_03189]{DRAFT}类别VARIANT的CppImplementationDataType定义: 类别VARIANT的CppImplementationDataType表示一个类型安全的联合。(RS_MANI_00039)

[TPS_MANI_03190]{DRAFT}类别VARIANT的CppImplementationDataType: 对于C ++绑定,类别VARIANT的CppImplementationDataType可以实现为:

  • 如果使用StdCppImplementationDataType子类,则为:ara::core::Variant
  • 如果使用CustomCppImplementationDataType子类,则使用自定义命名空间中的map类型(例如my::variant)(前提是可以使用可用的建模功能配置自定义命名空间中的类型)

(RS_MANI_00039)

[TPS_MANI_03191]{DRAFT}存储在VARIANT中的类型替代项的定义: 存储在类别VARIANT中的CppImplementationDataType中的类型替代项由聚合的templateArgument和定义CppTemplateArgument的数据类型的相应templateType定义。(RS_MANI_00039)

[constr_3429]{DRAFT}类别VARIANT的CppImplementationDataTypes没有使用分配器: 类别VARIANT的CppImplementationDataType不允许聚合包含指向Allocator的分配器角色的templateArgument。

图3.15中描述的示例显示了具有两个CppTemplateArguments的VARIANT的定义。 每个代表一种替代类型。

请注意,CppImplementationDataType的CppTemplateArguments在ARXML中排序,并且该顺序在对象图中不可见。
variant_exp

3.3.3.11 Bitfield Data Type

[TPS_MANI_03202]{DRAFT}bitfield 类型的定义: 在AUTOSAR元模型中,bitfield 不是通过具有自有类别的cpppimplementationdatatype实现的。bitfield是在类别TYPE_REFERENCE的StdCppImplementationDataType原语的上下文中定义的,该原语可以归结为类别VALUE的StdCppImplementationDataType。类别BITFIELD_TEXTTABLE 的CompuMethod用于为原始StdCppImplementationDataType的每一位指定特殊含义。(RS_MANI_00039)

在类别BITFIELD_TEXTTABLE的CompuMethod中具有掩码的CompuScales定义了隔离的部分,这些部分在与掩码匹配的数据的语义方面可以彼此独立。

使用类别为BITFIELD_TEXTTABLE的CompuMethod的规则与AUTOSAR Classic Platform中的规则相同,并在软件组件模板中进行了描述。

3.3.4 Compatibility of ApplicationDataType and CppImplementationDataType

ApplicationDataTypes的使用意味着在某个时间点上也存在相应的cpppimplementationdatatype。在ServiceInterface中使用CppImplementationDataTypes是生成ara::com proxies和skeletons的基础,也是在网络绑定中序列化有效负载的基础。

[TPS_MANI_03223]{DRAFT}CppImplementationDataType的存在: 在为ServiceInterface生成Service头文件的方法步骤之前,不需要存在CppImplementationDataTypes。在方法论中达到这一步之前,只使用ApplicationDataTypes来描述ServiceInterfaces的语义是完全可行的。(RS_MANI_00003)

因此,有必要定义兼容性规则,明确阐明ApplicationDataType与cpppimplementationdatatype的一致性,反之亦然。

有几个规则取决于数据类型的类别:

  1. 通常,如果类型映射将类别TYPE_REFERENCE的CppImplementationDataType作为目标,则下面给出的所有规则都将应用于CppImplementationDataType,它在解析所有此类引用之后才最终有效。并非所有规则都重复此步骤。 例如,如果文档指出可以将给定的ApplicationDataType映射到类别VALUE的CppImplementationDataType,则这应包括映射到引用另一个类别VALUE的CppImplementationDataType的类别TYPE_REFERENCE的CppImplementationDataType的可能性。
  2. [constr_5033]{DRAFT}数据类型与类别VALUE的兼容性: 类别VALUE的ApplicationDataType只能映射到也具有类别VALUE的cpppimplementationdatatype。在这种情况下,由CppImplementationDataType生成的C ++数据类型应能够表示ApplicationDataType所需的所有数值。如果C++数据类型可以表示的数值范围至少覆盖ApplicationDataType.swDataDefProps.dataConstr中的极限定义的范围,则满足此条件(通过CompuMethod转换的内部限制或物理限制,也必须由ApplicationDataType提供)。 如果C ++数据类型涵盖CompuMethod中定义的枚举范围,则也满足该条件。
  3. [constr_5034]{DRAFT}数据类型与类别BOOLEAN的兼容性: 类别BOOLEAN的ApplicationDataType只能映射到类别VALUE的CppImplementationDataType。
  4. [constr_5035]{DRAFT}数据类型与类别STRING的兼容性: 类别STRING的ApplicationDataType只能映射到类别STRING的CppImplementationDataType。
  5. [constr_5036]{DRAFT}数据类型与类别ARRAY的兼容性: 类别ARRAY的ApplicationDataType只能映射到:
    • 类别ARRAY的CppImplementationDataType ,或者
    • 类别VECTOR的CppImplementationDataType

在这种情况下,CppImplementationDataType的数组大小和数组元素的类型应确保可以按顺序将它们按1:1映射/传输到相应的应用程序数据,反之亦然。

  1. [constr_5037]{DRAFT}数据类型与具有variableSize的类别ARRAY的兼容性: 类别ARRAY的ApplicationDataType包含一个在一个定义维度中将arraySizeSemantics设置为variableSize的ApplicationArrayElement,其应该映射为:

    • 类别VECTOR的CppImplementationDataType
  2. [constr_5038]{DRAFT}数据类型与具有fixedSize的类别ARRAY的兼容性: 类别ARRAY的ApplicationDataType只包含一个在所有定义维度中将arraySizeSemantics设置为fixedSize的ApplicationArrayElement,其应该映射为:

    • 类别ARRAY的CppImplementationDataType
  3. [constr_5039]{DRAFT}数据类型与类别STRUCTURE的兼容性: 类别STRUCTURE的ApplicationDataType只能映射到类别STRUCTURE的cpppimplementationdatatype。这意味着,相应的元素对也应具有兼容的类型。

  4. [constr_5040]{DRAFT}表示可选元素结构的ApplicationRecordDataType和cpppimplementationdatatype的兼容性表示可选元素结构的ApplicationRecordDataType只能映射到表示可选元素结构的类别STRUCTURE的cpppimplementationdatatype,前提是对应的元素对具有相同的isOptional属性值。

  5. [constr_5041]{DRAFT}数据类型与类别ASSOCIATIVE_MAP的兼容性: 类别ASSOCIATIVE_MAP的ApplicationDataType只能映射到类别ASSOCIATIVE_MAP的CppImplementationDataType。

  6. [constr_5042]{DRAFT}没有数据类型映射到类别VARIANT的CppImplementationDataType: ApplicationDataType绝不能映射到类别VARIANT的CppImplementationDataType。

  7. [constr_5043]{DRAFT}禁止映射到CppImplementationDataType的数据类型: AUTOSAR自适应平台不支持类别为COM_AXIS,RES_AXIS,CURVE,MAP,CUBOID,CUBE_4,CUBE_5的ApplicationDataType,因此无法将其映射到CppImplementationDataType。

请注意,[constr_5043]中列出的类别不受支持,因为在Adaptive Platform中没有相关用法的用例。

在AUTOSAR经典平台上,不需要在DataTypeMap中考虑复合数据类型的元素。 之所以制定此规则,是因为以下事实:AUTOSAR经典平台上的复合数据类型的元素不一定具有对ImplementationDataType的引用。

在AUTOSAR自适应平台上,情况有所不同。 CppImplementationDataTypeElement始终需要对形式化CppImplementationDataType的引用。

如果在DataTypeMap中提到所有相关的数据类型,则数据类型定义的处理变得更加容易,这就是[constr_5044]的存在的动机。

[constr_5044]{DRAFT}用于复合数据类型的DataTypeMap: 在给定ServiceInterface的上下文中,在事件,字段,方法的上下文中使用的ApplicationCompositeDataType的定义的上下文中使用的所有成对的ApplicationDataType和CppImplementationDataType必须在包含在其中一个DataTypeMappingSet中的DataTypeMap中进行描述 在PortInterfaceToDataTypeMapping中引用,该接口还引用了提到的ServiceInterface。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值