目录
一、Type Emitter在AUTOSAR中定义的语义用法?
二、StdCppImplementationDataType有哪些类型?
一、Type Emitter在AUTOSAR中定义的语义用法?
前文中我们已经了解到Type Emitter是CppImplementationDataType的一个属性,这里CppImplementationDataType本身是一个抽象的类,实际在应用中使用的是其实例化之后的类,包括StdCppImplementationDataType和CustomCppImplementationDataType,CustomCppImplementationDataType是不需要定义typeEmitter的,原因是如果定义了typeEmitter,也仅仅将该参数设置为数据类型定义的头文件的标准名,这个其实已经在headerFile中进行了定义;StdCppImplementationDataType对typeEmitter的定义则要基于其具体使用的IDT类型。基于此,下文中讨论的typeEmitter配置是针对StdCppImplementationDataType的配置,既然StdCppImplementationDataType的typeEmitter配置是基于其具体的IDT类型而定义的,我们自然要先了解它有哪几种类型。
二、StdCppImplementationDataType有哪些类型?
StdCppImplementationDataType的类型如下:
- Primitive(原始数据类型)
- Type Reference
- bool、float、double
- uint8_t/uint16_t/uint32_t/uint64_t
- int8_t/int16_t/int32_t/int64_t
- String
- Array
- Vector
- Struct
- Enumeration
- Map
- Variant
- Bitfield
此处先不对具体类型进行细节描述,我们简单做个分类:
- 原始数据类型:
包括TypeReference以及下表中的类型
IDT类型 | Boolean | Signed Integer | Unsigned Integer | Floating Point |
命名 | bool | int8_t | uint8_t | float |
| int16_t | uint16_t | double | |
| int32_t | uint32_t |
| |
| int64_t | uint64_t |
|
- 复杂数据类型:包括String、Array、Vector、Struct、Enumeration、Map、Variant、Bitfield
三、如何配置Type Emitter
Type Emitter的标准值应该为TYPE_EMITTER_ARA,如果我们将IDT的Type Emitter配置为该值,则ARA generator会为该IDT进行类型定义(参考PREEvision AP SOA建模如何配置Type Emitter (一)_pree vision建摸soa-CSDN博客https://blog.csdn.net/weixin_39974126/article/details/138522612?spm=1001.2014.3001.5501),反之如果 Type Emitter的值不是TYPE_EMITTER_ARA,则ARA generator不会为该IDT进行类型定义。AUTOSAR中对此进行了定义:
- 原始数据类型中的uint8_t/uint16_t/uint32_t/uint64_t以及int8_t/int16_t/int32_t/int64_t的Type Emitter需要配置为cstdint,例如下图为对int8_t的定义。
- 原始数据中的基础数据类型float、double、bool则不需要定义typeEmitter
- 原始数据类型中的TypeReference以及复杂数据类型的typeEmitter则需要使用标准值,即TYPE_EMITTER_ARA。
四、总结
- PREEvision建模中使用的CppImplementationDataType,其实例化包括CustomCppImplementationDataType和StdCppImplementationDataType,其中需要配置typeEmitter属性的是StdCppImplementationDataType
- StdCppImplementationDataType的IDT类型整体可以分为原始数据类型及复杂数据类型
- 原始数据类型的Type Emitter按如下要求进行配置:
- boolean、float和double不需要设置Type Emitter;
- uint/int8/16/32/64_t的Type Emitter设置的是”cstdint”;
- TypeReference的Type Emitter设置的是“TYPE_EMITTER_ARA”
- 复杂数据类型的Type Emitter设置的是“TYPE_EMITTER_ARA”