:3 Application Design(1~3节))
Posted 玄道公子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了: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 | |||
Package | M2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::ApplicationStructure | |||
Note | 这个元类表示在AUTOSAR自适应平台上支持应用软件形式化建模的能力。因此,只能在AUTOSAR自适应平台上使用。 Tags: atp.Status = draft atp.recommendedPackage=AdaptiveApplicationSwComponentTypes | |||
Base | ARElement, ARObject, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType, CollectableElement, Identifiable, MultilanguageReferrable, PackageableElement, Referrable, SwComponentType | |||
Attribute | Type | Mult. | Kind | Note |
internalBehavior | AdaptiveSwcInternal Behavior | 0..1 | aggr | 此聚合表示AUTOSAR自适应平台的 AdaptiveApplicationSwComponentType的内部行为。 Stereotypes: atpSplitable; atpVariation Tags: atp.Splitkey=internalBehavior, variationPoint.shortLabel atp.Status=draft vh.latestBindingTime=preCompileTime |
Class | AdaptiveSwcInternalBehavior | |||
Package | M2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::AdaptiveInternalBehavior | |||
Note | 这个元类表示定义AUTOSAR自适应平台上使用的AtomicSwComponentType的内部行为的能力 请注意,本例中的内部行为模型与AUTOSAR经典平台的情况形成鲜明对比,是非常小的 Tags: atp.Status = draft | |||
Base | ARObject, Identifiable, MultilanguageReferrable, Referrable | |||
Attribute | Type | Mult. | Kind | Note |
serviceDependency | SwcServiceDependency | * | aggr | 这表示AdaptiveInternalBehavior拥有的SwcServiceDependencys的集合 Tags: atp.Status=draft |
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) | |||
Package | M2::AUTOSARTemplates::SWComponentTemplate::Datatype::Datatypes | |||
Note | application data type从应用程序的角度定义数据类型。尤其是当“物理”受限时应该使用它。 ApplicationDataType代表在应用程序模型中看到的一组值,例如度量单位。 它不考虑实现细节,例如位大小,字节序等。 应该可以只使用ApplicationData类型对VFB系统的应用程序级方面进行建模。 | |||
Base | ARElement, ARObject, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType, AutosarDataType, CollectableElement, Identifiable, MultilanguageReferrable, PackageableElement, Referrable | |||
Subclasses | ApplicationCompositeDataType, ApplicationPrimitiveDataType | |||
Attribute | Type | Mult. | Kind | Note |
- | - | - | - | - |
3.3.2.1 String Data Type
虽然对于表示文本字符串的数据类型的处理与AUTOSAR经典平台和AUTOSAR自适应平台上ApplicationDataTypes的定义非常相似,但对于AUTOSAR自适应平台上cpppimplementationdatatypes的级别,有特殊的规定。
有关在cpppimplementationdatatype级别上对字符串数据类型建模的更多信息,请参阅第3.3.3.4节。
为了保持一致性,本章总结了ApplicationDataTypes的建模,以便对AUTOSAR自适应平台所涉及的表示文本字符串的数据类型进行建模。
用于定义类别STRING的ApplicationPrimitiveDataType的元类如图3.1所示。
请注意,由于使用的编程语言的数据类型比普通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 | |||
Package | M2::AUTOSARTemplates::SWComponentTemplate::Datatype::Datatypes | |||
Note | 基本数据类型定义了一组允许的值。 Tags:atp.recommendedPackage=ApplicationDataTypes | |||
Base | ARElement, ARObject, ApplicationDataType, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType, AutosarDataType, CollectableElement, Identifiable, MultilanguageReferrable, PackageableElement, Referrable | |||
Attribute | Type | Mult. | Kind | Note |
- | - | - | - | - |
Class | SwTextProps | |||
Package | M2::MSR::DataDictionary::DataDefProperties | |||
Note | 这个元类表示适用于变量或校准参数中字符串的特定属性。 Tags:atp.recommendedPackage=ApplicationDataTypes | |||
Base | ARObject | |||
Attribute | Type | Mult. | Kind | Note |
arraySizeSemantics | ArraySizeSemanticsEnum | 1 | attr | 此属性控制表示实现数据类型中字符串的数组的数组大小的语义。 它支持ApplicationDatatype和ImplementationDatatype之间的安全转换, 即使是需要的可变长度字符串,例如支持SAE J1939 |
baseType | SwBaseType | 0..1 | ref | 这是字符串中一个字符的基类型。特别是,此baseType表示 ApplicationData类型级别上字符串中字符的预期编码 Tags:xml.sequenceOffset=30 |
swFillCharacter | Integer | 0..1 | attr | 填充最大长度swMaxTextSize的文本参数的填充字符 该值将根据数据对象的相关基类型中指定的编码进行解释, 例如0x30(十六进制)表示ASCII字符零作为填充字符, 0(十进制)表示字符串的结束作为填充字符 填充字符的使用取决于数组化语义。 Tags:xml.sequenceOffset=40 |
swMaxTextSize | Integer | 1 | attr | 指定最大文本大小(以字符为单位)。注意字节的大小取决于相应基类型中的编码。 Stereotypes:atpVariation Tags: vh.latestBindingTime=preCompileTime xml.sequenceOffset=20 |
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] DRAFTApplicationAssocMapDataType的使用是受到限制的: ApplicationAssocMapDataType的使用仅限于在可执行文件上下文中定义的AdaptiveApplicationSwComponentTypes和CompositionSwComponentTypes的上下文,即此类数据类型不应在AUTOSAR classic平台上使用。
[constr_3349] 是一种形式化的方法,用于表示ApplicationAssocMapDataType只能在AUTOSAR自适应平台上使用。
[TPS_MANI_01016]DRAFTApplicationAssocMapDataType 的类别:ApplicationAssocMapDataType.category 的值应设置为属性的关联映射(ASSOCIATIVE_MAP)。
图3.2描述了ApplicationAssocMapDataType的结构示例。
如图3.2所示,分类图的ApplicationDataType的概念不应与ApplicationAssocMapDataType混淆。
在运行时使用关联数据结构有许多技术含义,例如,在整个数据结构的上下文中,每个键的内容应是唯一的。另一方面,如果值端的内容包含重复项,则完全没有问题,例如,两个唯一键与具有完全相同内容的值相关联。但是,这些方面对ApplicationAssocMapDataType的形式化模型没有任何影响,因此本文档中不考虑这些方面。
ApplicationAssocMapDataType的建模有点简单,其动机主要是需要定义键和值的数据类型。
没有假设关联映射的实现的结构可能是什么样子的。例如,在C++(它是目前唯一支持的AutoSar自适应平台上的语言绑定)中,使用关联映射的直接方式是利用容器ara::core::Map(其中实现对客户端程序员不透明)。
Class | ApplicationAssocMapDataType | |||
Package | M2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::ApplicationDataType | |||
Note | 一种应用程序的数据类型,它是一个映射,由一个键和一个值组成。 Tags: atp.Status=draft atp.recommendedPackage=ApplicationDataTypes | |||
Base | ARElement, ARObject, ApplicationCompositeDataType, ApplicationDataType, AtpBlueprint, Atp Blueprintable, AtpClassifier, AtpType, AutosarDataType, CollectableElement, Identifiable, Multilanguage Referrable, PackageableElement, Referrable | |||
Attribute | Type | Mult. | Kind | Note |
key | ApplicationAssocMapElement | 1 | aggr | 用于唯一标识映射值的映射的键元素。 Tags:atp.Status=draft |
value | ApplicationAssocMapElement | 1 | aggr | 存储与键关联的内容的映射的值元素。 Tags:atp.Status=draft |
Class | ApplicationAssocMapElement | |||
Package | M2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::ApplicationDataType | |||
Note | 描述应用程序映射数据类型的元素的属性。 Tags:atp.Status=draft | |||
Base | ARObject, ApplicationCompositeElementDataPrototype, AtpFeature, AtpPrototype, DataPrototype, Identifiable, MultilanguageReferrable, Referrable | |||
Attribute | Type | Mult. | Kind | Note |
- | - | - | - | - |
清单3.1提供了一个ApplicationAssocMapDataType的建模草图示例。
图3.4包含模型的相应图形表示。
<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元素的值都应该是唯一的。
Class | ApplicationAssocMapValueSpecification | |||
Package | M2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::ApplicationDataType | |||
Note | 这个元类表示定义ApplicationAssocMapDataType初始化的能力。 Tags:atp.Status=draft | |||
Base | ARObject, CompositeValueSpecification, ValueSpecification | |||
Attribute | Type | Mult. | Kind | Note |
mapElementTuple (ordered) | ApplicationAssocMapElementValueSpecification | * | aggr | 此聚合表示ApplicationAssocMapValueSpecification元素的初始值。 Tags:atp.Status=draft |
Class | ApplicationAssocMapElementValueSpecification | |||
Package | M2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::ApplicationDataType | |||
Note | 这个元类表示定义ApplicationAssocMapDataType的元素初始化的能力。 Tags:atp.Status=draft | |||
Base | ARObject | |||
Attribute | Type | Mult. | Kind | Note |
key | ValueSpecification | 1 | aggr | 此聚合表示AssociationEventValueSpecification的键(key)部分的初始化。 Tags:atp.Status=draft |
value | ValueSpecification | 1 | aggr | 此聚合表示AssociationEventValueSpecification的值(value)部分的初始化。 Tags:atp.Status=draft |
3.3.2.3 Attributes of SwDataDefProps
[constr_1478]DRAFTSwDataDefProps适用于AUTOSAR自适应平台专用的ApplicationDataTypes: 表3.10列出了给定类别允许的SwDataDefProps和其他属性及其多重性的完整列表。
[constr_1478]的一个结论是,表3.10仅显示了仅限于AUTOSAR自适应平台的类别值。有关AUTOSAR classic平台上也支持的所有其他类别值,请参阅软件组件模板规范中包含的类似表。
Attributes of SwDataDefProps | Root Elem. | Attribute Existence per Category | |
ApplicationAssocMapDataType | ApplicationAssocMapElement | ASSOCIATIVE_MAP | |
additionalNativeTypeQualifier | |||
annotation | x | x | * |
baseType | |||
compuMethod | |||
dataConstr | |||
displayFormat | x | x | 0..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: ApplicationAssocMapElement | x | 1 | |
value: ApplicationAssocMapElement | x | 1 |
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]DRAFTcpppimplementationdatatype的语义: 抽象元类cpppimplementationdatatype支持对支持C++语言绑定的数据类型进行专门建模。(RS_MANI_-00039)
[TPS_MANI_03197]DRAFTStdCppImplementationDataType 的语义: 元类STDCPPPACTION DATABATYPE支持将被映射到C++语言绑定中的C++标准库特征的数据类型的建模。(RS_MANI_00039)
请注意,为了简化起见,结构(category=STRUCTURE)和类型别名(category=type_REFERENCE)也被建模为StdCppImplementationDataTypes。
[TPS_MANI_03198]DRAFTCustomCppImplementationDataType的语义: 元类CustomCppImplementationDataType支持将映射到头文件中声明的C++语言绑定中自定义实现的数据类型的建模。
请注意,customcpppimplementationdatatype的category值受 [constr_1578] 限制。
这意味着只有StdCppImplementationDataTypes才能对原始数据类型和字符串进行建模。原因是AUTOSAR中为SOME/IP和DDS定义的序列化规则是基于标准库定义的数据类型。
Class | CppImplementationDataType (abstract) | |||
Package | M2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::CppImplementationDataType | |||
Note | 这个元类表示指定一个可重用的数据类型定义的方式,它是C++语言绑定的基础。 Tags:atp.Status=draft | |||
Base | ARElement, ARObject, AbstractImplementationDataType, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType, AutosarDataType, CollectableElement, CppImplementationDataTypeContextTarget, Identifiable, MultilanguageReferrable, PackageableElement, Referrable | |||
SubClasses | CustomCppImplementationDataType, StdCppImplementationDataType | |||
Attribute | Type | Mult. | Kind | Note |
arraySize | PositiveInteger | 0..1 | attr | 如果封闭的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 |
typeEmitter | NameToken | 0..1 | attr | 此属性可用于控制如何将相应的CppImplementationDataType贡献给语言绑定。 |
typeReference | CppImplementationDataType | 0..1 | ref | 此引用应定义为定义类型引用(也称为typedef)。 Tags:atp.Status=draft |
Class | StdCppImplementationDataType | |||
Package | M2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::CppImplementationDataType | |||
Note | 该元类表示指定数据类型定义的方式,该数据类型定义是C++语言与C++标准库特征绑定的基础。 Tags: atp.Status=draft atp.recommendedPackage=CppImplementationDataTypes | |||
Base | ARElement, ARObject, AbstractImplementationDataType, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType, AutosarDataType, CollectableElement, CppImplementationDataType, CppImplementationData TypeContextTarget, Identifiable, MultilanguageReferrable, PackageableElement, Referrable | |||
Attribute | Type | Mult. | Kind | Note |
- | - | - | - | - |
Class | CustomCppImplementationDataType | |||
Package | M2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::CppImplementationDataType | |||
Note | 该元类表示指定数据类型定义的方式,该数据类型定义是C++语言与在配置的头文件中声明的自定义实现绑定的基础。此customcpppimplementationdatatype的短名称定义自定义实现的类名(Class-Name) Tags: atp.Status=draft atp.recommendedPackage=CppImplementationDataTypes | |||
Base | ARElement, ARObject, AbstractImplementationDataType, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType, AutosarDataType, CollectableElement, CppImplementationDataType, CppImplementationData TypeContextTarget, Identifiable, MultilanguageReferrable, PackageableElement, Referrable | |||
Attribute | Type | Mult. | Kind | Note |
headerFile | String | 1 | attr | 使用自定义类声明配置头文件。 |
[constr_1571]DRAFTCppImplementationDataType是受限制的: cpppimplementationdatatype的使用仅限于在可执行文件上下文中定义的AdaptiveApplicationSwComponentTypes和compositionswcomponenttypes的上下文。
[TPS_MANI_01167]DRAFTAbstractImplementationDataType : 元类CppImplementationDataType继承自抽象基类AbstractImplementationDataType,以便成为来自其他想要引用**“通用 ImplementationDataType”**的其他元类的特定引用的有效目标。(RS_MANI_00039)
Class | AbstractImplementationDataType(abstract) | |||
Package | M2::AUTOSARTemplates::CommonStructure::ImplementationDataTypes | |||
Note | 这个元类表示不同类型ImplementationDataType的抽象基类 | |||
Base | ARElement, ARObject, AtpBlueprint, AtpBlueprintable, AtpClassifier, AtpType, AutosarDataType, CollectableElement, Identifiable, MultilanguageReferrable, PackageableElement, Referrable | |||
Attribute | Type | Mult. | Kind | Note |
- | - | - | - | - |
在元类DataTypeMap中可以找到一个突出的例子来说明引用 “通用ImplementationDataType ” 的想法。DataTypeMap存在的目的是将ApplicationDataType映射到ImplementationDataType或cppplementationdatatype。
通过建立参考模型DataTypeMap.implementationDataType作为对AbstractImplementationDataType的引用,两个选项都可以在单个角色中使用。
与C语言相反,C++支持程序中命名空间的定义。这个特性也可以在AUTOSAR自适应平台上开发,因此需要在建模方法中表示出来。
[TPS_MANI_01168]DRAFTCppImplementationDataType的命名空间规范: 为CppImplementationDataType定义命名空间的能力是通过在角色命名空间中的CppImplementationDataType处聚合SymbolProps 来表示的。(RS_MANI_00039)
[constr_3443]DRAFTStdCppImplementationDataType的命名空间规范: 不允许为类别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]DRAFTCppTemplateArgument.allocator角色中的引用语义: 属性cpptTemplateArgument.allocator指定要在语言绑定中模板的相应位置填充的分配器类(allocator)的行为。(RS_MANI_00039)
[constr_1576]DRAFTCppTemplateArgument.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 | |||
Package | M2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::CppImplementationDataType | |||
Note | 此元类具有为模板参数定义属性的能力 Tags: atp.Status=draft | |||
Base | ARObject | |||
Attribute | Type | Mult. | Kind | Note |
allocator | Allocator | 0..1 | ref | 此引用标识适用的分配器。 Tags: atp.Status=draft |
category | CategoryString | 0..1 | attr | 该属性将用于进一步阐明有关CppTemplateArgument的语义。 |
inplace | Boolean | 0..1 | attr | 此属性指定是在代码生成中使用引用的templateType的shortName,还是在封闭的CppImplementationDataType之外定义类型声明(true),还是将类型定义嵌入在封闭的CppImplementationDataType内,并且忽略shortName(false) 。 |
templateType | CppImplementationDataType | 0..1 | ref | 此引用标识语言绑定所需的特定模板参数的数据类型。 Tags: atp.Status=draft |
[TPS_MANI_01171]DRAFT结构化数据类型的建模: 元类CppImplementationDataType支持通过角色subElement中的CppImplementationDataTypeElement的聚合来创建嵌套数据类型。由于结构化数据类型中子元素的顺序很重要,因此将聚合子元素建模为有序集合。(RS_MANI_00039)
请注意,虽然结构的建模是使用cpppimplementationdatatype正式完成的,但实际上只有使用StdCppImplementationDataType才能实现此目的(请参见**[constr_1578]**)
Class | CppImplementationDataTypeElement | |||
Package | M2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::CppImplementationDataType | |||
Note | 声明一个在本地聚合的数据对象。 这样的元素只能在聚合的范围内使用。 CppImplementationDataTypeElement用于表示结构的元素,定义其类型。 Tags: atp.Status=draft | |||
Base | ARObject, AbstractImplementationDataTypeElement, AtpClassifier, AtpFeature, AtpStructureElement,CppImplementationDataTypeContextTarget, Identifiable, MultilanguageReferrable, Referrable | |||
Attribute | Type | Mult. | Kind | Note |
isOptional | Boolean | 0..1 | attr | 此属性表示将封闭的CppImplementationDataTypeElement声明为可选的能力。这意味着,在运行时, CppImplementationDataTypeElement可能有也可能没有有效值,因此应被忽略。 底层运行时软件提供了在通信的发送端将CppImplementationDataTypeElement设置为无效并在接收端确定其有效性的方法。 |
typeReference | CppImplementationDataTypeElementQualifier | 0..1 | aggr | 此聚合定义CppImplementationDataTypeElement的类型,并确定在C ++中是否 CppImplementationDataTypeElement在封闭的CppImplementationDataType的内部或外部定义 Tags: atp.Status=draft |
请注意,没有支持支持结构化数据类型的“混合”建模的方法,这样C++级的结果数据类型将由C++中的数据类型和C子系统的数据类型组成。
虽然这在技术上在代码级是可能的,但在建模级却需要付出巨大的努力,而且普遍的共识是,对于这种“混合”数据类型没有真正的用例。
C++数据类型系统可以在AutoSar自适应平台的实现上完全取代C++中的“遗留”C数据类型。
[constr_1572]DRAFTCppImplementationDataType中SwDataDefProps.implementationDataType的用法: 在cpppimplementationdatatype的范围内,引用CppImplementationDataType.swDataDefProps.implementationDataType 不应存在。
这一方面也由 [Const_1579] 以更通用的形式表达。
由于 [constr_1572] ,类型引用必须在AUTOSAR自适应平台上以不同的方式进行。为此,可提供专门的参考资料。
[TPS_MANI_01172]DRAFTCppImplementationDataType范围内类型引用的说明: 引用CppImplementationDataType.typeReference可以用于创建从封闭的CppImplementationDataType到另一个CppImplementationDataType的类型引用。(RS_MANI_00039)
[TPS_MANI_01173]DRAFTCppImplementationDataTypeElement范围内类型引用的说明: CppImplementationDataTypeElement.typeReference可用于创建对CppImplementationDataType的引用,该引用应适用于封闭的CppImplementationDataTypeElement。(RS_MANI_00039)
请注意,CppImplementationDataTypeElement.typeReference是实现为允许将inplace属性添加到typeReference的关联类。
Class | CppImplementationDataTypeElementQualifier | |||
Package | M2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::CppImplementationDataType | |||
Note | 此元素将CppImplementationDataTypeElement的类型引用限定为CppImplementationDataType。 Tags: atp.Status=draft | |||
Base | ARObject | |||
Attribute | Type | Mult. | Kind | Note |
inplace | Boolean | 0..1 | attr | 此属性定义C ++中CppImplementationDataTypeElement的成员类型是封闭结构内部的嵌入式类型元素(true)还是类型声明是在结构外部定义的 |
typeReference | CppImplementationDataType | 1 | ref | 此引用定义类型引用。 Tags: atp.Status=draft |
[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]DRAFTCppTemplateArgument.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]DRAFTCppImplementationDataTypeElement.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 | |||
Package | M2::AUTOSARTemplates::AdaptivePlatform::ApplicationDesign::CppImplementationDataType | |||
Note | 这个元类表示能够影响对象在内存中的分配方式,例如,可以控制对象是在堆上还是在堆栈上分配。 Tags: atp.Status=draft atp.recommendedPackage=Allocators | |||
Base | ARElement, ARObject, CollectableElement, Identifiable, MultilanguageReferrable, PackageableElement, Referrable | |||
Attribute | Type | Mult. | Kind | Note |
namespace(ordered) | SymbolProps | * | aggr | 此聚合允许定义分配器的命名空间。 Tags: atp.Status=draft |
[TPS_MANI_01100]DRAFTAllocator 的语义: 元类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
Category | Applicable to ... | Description | |||||||
AADT | ARDT | APDT | ARE | AAE | AVS | SCDT | CCDT | ||
VALUE | x | x | x | x | x | 包含单个值。另见[TPS_MANI_03192]。 | |||
TYPE_REFERENCE | x | 该元素是通过引用另一种数据类型(通过CppImplementationDataType.typeReference来定义的)。 | |||||||
STRUCTURE | x | x | x | x | 包含一个或几个其他元素,这些元素可以具有不同的AutosarDataType。 另请参阅[TPS_MANI_03180] | ||||
VARIANT | x | x | 可以容纳不同数据类型的值。 它与STRUCTURE类似,不同之处在于其所有成员均始于内存中的同一位置 VARIANT数据原型一次只能包含其元素之一,并且代表类型安全的联合。 VARIANT的大小至少是最大成员的大小。 另请参阅[TPS_MANI_03189]。 | ||||||
ARRAY | x | x | x | x | x | 固定大小的相同类型子元素数组。 另请参阅[TPS_MANI_03169]。 | |||
VECTOR | x | x | 一系列元素的数组,同时可以在运行时增加长度的数据结构,另请参阅[TPS_MANI_03174]。 | ||||||
ASSOCIATIVE_MAP | x | x | 键值对的关联数组。 另请参阅[TPS_MANI_03183] | ||||||
STRING | x | x | x | x 以上是关于:3 Application Design(1~3节))的主要内容,如果未能解决你的问题,请参考以下文章 破性改进Stat-Ease Design-Expert v10.0.0.3 |