AUTOSAR自适应平台类型规范详解
目录
1. 概述与功能概览
AUTOSAR自适应平台的平台类型规范定义了一组原始的CppImplementationDataType
,这些类型可以在ARXML中定义的ServiceInterface
描述中使用。这些定义来自于AUTOSAR TPS_ManifestSpecification。
平台类型规范的主要目的是提高应用程序的可移植性,避免为每个应用程序重新定义相同的类型。通过标准化基本数据类型,AUTOSAR确保了跨平台和跨应用的一致性。
需要注意的是,AUTOSAR自适应平台接口设计与C++14兼容,同时也允许使用C++17等更新版本的C++特性。AUTOSAR自适应核心文档定义了多个AUTOSAR功能集群作为其公共接口的一部分使用的通用类和功能。
2. AUTOSAR平台类型架构
2.1 平台类型继承结构
AUTOSAR平台类型遵循严格的继承结构,所有平台类型都继承自StdCppImplementationDataType
基类。下图展示了AUTOSAR自适应平台中平台类型的继承结构和分类:
在上图中,我们可以看到平台类型分为四大类:
- 基本数据类型:包括布尔类型(bool)
- 有符号整型:包括不同位宽的有符号整数(int8_t、int16_t、int32_t、int64_t)
- 无符号整型:包括不同位宽的无符号整数(uint8_t、uint16_t、uint32_t、uint64_t)
- 浮点类型:包括单精度(float)和双精度(double)浮点数
所有这些类型都共享共同的属性,如category和shortName,同时各自有特定的实现特性。这种架构设计确保了类型系统的一致性和可扩展性。
2.2 CppImplementationDataType元模型
为了更好地理解AUTOSAR平台类型的设计,以下是CppImplementationDataType
的元模型结构图:
上图展示了CppImplementationDataType
在AUTOSAR元模型中的位置和关系:
-
继承关系:
CppImplementationDataType
继承自Referrable
StdCppImplementationDataType
继承自CppImplementationDataType
-
组合关系:
ARPackage
通过element属性组合CppImplementationDataType
CppImplementationDataType
可以包含CppImplementationDataTypeElement
子元素
-
自引用关系:
CppImplementationDataType
可以通过typeReference引用其他CppImplementationDataType
-
使用关系:
ServiceInterface
使用StdCppImplementationDataType
定义接口
这种元模型设计使得AUTOSAR能够在统一框架下定义各种复杂的数据类型,并保持类型系统的一致性和可扩展性。
2.3 平台类型到C++的映射关系
AUTOSAR平台类型需要映射到实际的C++类型以便在代码中使用。下图展示了这种映射关系:
从图中可以看出:
-
基本类型映射:
- AUTOSAR
bool
类型映射到C++的内置bool
类型 - AUTOSAR浮点类型映射到对应的C++内置类型(
float
和double
)
- AUTOSAR
-
整型类型映射:
- 所有AUTOSAR整型类型(有符号和无符号)都映射到
<cstdint>
头文件中的对应类型 - 这确保了跨平台的二进制兼容性和一致的数据宽度
- 所有AUTOSAR整型类型(有符号和无符号)都映射到
这种映射机制确保了AUTOSAR应用程序在不同平台和编译器上具有一致的行为,提高了代码的可移植性和可靠性。
3. 原始数据类型详解
3.1 布尔类型
AUTOSAR定义了bool
类型作为布尔值的标准表示:
<STD-CPP-IMPLEMENTATION-DATA-TYPE>
<SHORT-NAME>bool</SHORT-NAME>
<CATEGORY>VALUE</CATEGORY>
<TYPE-EMITTER>FUNDAMENTAL_TYPE</TYPE-EMITTER>
</STD-CPP-IMPLEMENTATION-DATA-TYPE>
主要特点:
- 映射到C++的
bool
类型 - 能够表示两个值:true或false
category
属性设置为VALUEtypeEmitter
设置为FUNDAMENTAL_TYPE,指示这是一个基本类型
需要注意的是,C++中sizeof(bool)
的值是实现定义的,可能在不同平台上有所不同。
3.2 有符号整型
AUTOSAR定义了四种标准的有符号整型,覆盖了从8位到64位的不同数据宽度需求。
3.2.1 int8_t
8位有符号整型:
<STD-CPP-IMPLEMENTATION-DATA-TYPE>
<SHORT-NAME>int8_t</SHORT-NAME>
<CATEGORY>VALUE</CATEGORY>
<HEADER-FILE>cstdint</HEADER-FILE>
</STD-CPP-IMPLEMENTATION-DATA-TYPE>
主要特点:
- 映射到C++
<cstdint>
头文件中的int8_t
- 宽度固定为8位
- 值范围:-128到127
- 使用二补码表示法表示负数
3.2.2 int16_t
16位有符号整型:
<STD-CPP-IMPLEMENTATION-DATA-TYPE>
<SHORT-NAME>int16_t</SHORT-NAME>
<CATEGORY>VALUE</CATEGORY>
<HEADER-FILE>cstdint</HEADER-FILE>
</STD-CPP-IMPLEMENTATION-DATA-TYPE>
主要特点:
- 映射到C++
<cstdint>
头文件中的int16_t
- 宽度固定为16位
- 值范围:-32,768到32,767
- 使用二补码表示法表示负数
3.2.3 int32_t
32位有符号整型:
<STD-CPP-IMPLEMENTATION-DATA-TYPE>
<SHORT-NAME>int32_t</SHORT-NAME>
<CATEGORY>VALUE</CATEGORY>
<HEADER-FILE>cstdint</HEADER-FILE>
</STD-CPP-IMPLEMENTATION-DATA-TYPE>
主要特点:
- 映射到C++
<cstdint>
头文件中的int32_t
- 宽度固定为32位
- 值范围:-2,147,483,648到2,147,483,647
- 使用二补码表示法表示负数
3.2.4 int64_t
64位有符号整型:
<STD-CPP-IMPLEMENTATION-DATA-TYPE>
<SHORT-NAME>int64_t</SHORT-NAME>
<CATEGORY>VALUE</CATEGORY>
<HEADER-FILE>cstdint</HEADER-FILE>
</STD-CPP-IMPLEMENTATION-DATA-TYPE>
主要特点:
- 映射到C++
<cstdint>
头文件中的int64_t
- 宽度固定为64位
- 值范围:-9,223,372,036,854,775,808到9,223,372,036,854,775,807
- 使用二补码表示法表示负数
3.3 无符号整型
与有符号整型类似,AUTOSAR也定义了四种标准的无符号整型。
3.3.1 uint8_t
8位无符号整型:
<STD-CPP-IMPLEMENTATION-DATA-TYPE>
<SHORT-NAME>uint8_t</SHORT-NAME>
<CATEGORY>VALUE</CATEGORY>
<HEADER-FILE>cstdint</HEADER-FILE>
</STD-CPP-IMPLEMENTATION-DATA-TYPE>
主要特点:
- 映射到C++
<cstdint>
头文件中的uint8_t
- 宽度固定为8位
- 值范围:0到255
3.3.2 uint16_t
16位无符号整型:
<STD-CPP-IMPLEMENTATION-DATA-TYPE>
<SHORT-NAME>uint16_t</SHORT-NAME>
<CATEGORY>VALUE</CATEGORY>
<HEADER-FILE>cstdint</HEADER-FILE>
</STD-CPP-IMPLEMENTATION-DATA-TYPE>
主要特点:
- 映射到C++
<cstdint>
头文件中的uint16_t
- 宽度固定为16位
- 值范围:0到65,535
3.3.3 uint32_t
32位无符号整型:
<STD-CPP-IMPLEMENTATION-DATA-TYPE>
<SHORT-NAME>uint32_t</SHORT-NAME>
<CATEGORY>VALUE</CATEGORY>
<HEADER-FILE>cstdint</HEADER-FILE>
</STD-CPP-IMPLEMENTATION-DATA-TYPE>
主要特点:
- 映射到C++
<cstdint>
头文件中的uint32_t
- 宽度固定为32位
- 值范围:0到4,294,967,295
3.3.4 uint64_t
64位无符号整型:
<STD-CPP-IMPLEMENTATION-DATA-TYPE>
<SHORT-NAME>uint64_t</SHORT-NAME>
<CATEGORY>VALUE</CATEGORY>
<HEADER-FILE>cstdint</HEADER-FILE>
</STD-CPP-IMPLEMENTATION-DATA-TYPE>
主要特点:
- 映射到C++
<cstdint>
头文件中的uint64_t
- 宽度固定为64位
- 值范围:0到18,446,744,073,709,551,615
3.4 浮点类型
AUTOSAR定义了两种标准的浮点类型,用于表示实数。
3.4.1 float
单精度浮点类型:
<STD-CPP-IMPLEMENTATION-DATA-TYPE>
<SHORT-NAME>float</SHORT-NAME>
<CATEGORY>VALUE</CATEGORY>
<TYPE-EMITTER>FUNDAMENTAL_TYPE</TYPE-EMITTER>
</STD-CPP-IMPLEMENTATION-DATA-TYPE>
主要特点:
- 映射到C++的内置
float
类型 - 通常为32位浮点类型(IEEE 754单精度格式)
typeEmitter
设置为FUNDAMENTAL_TYPE
3.4.2 double
双精度浮点类型:
<STD-CPP-IMPLEMENTATION-DATA-TYPE>
<SHORT-NAME>double</SHORT-NAME>
<CATEGORY>VALUE</CATEGORY>
<TYPE-EMITTER>FUNDAMENTAL_TYPE</TYPE-EMITTER>
</STD-CPP-IMPLEMENTATION-DATA-TYPE>
主要特点:
- 映射到C++的内置
double
类型 - 通常为64位浮点类型(IEEE 754双精度格式)
typeEmitter
设置为FUNDAMENTAL_TYPE
对于float
和double
类型,需要注意如果typeEmitter
设置为非TYPE_EMITTER_ARA的值,则ARA生成器不会生成相应的数据类型定义。
4. 总结
AUTOSAR自适应平台的平台类型规范提供了一组标准化的原始数据类型,这些类型在AUTOSAR应用程序开发中发挥着重要作用:
-
标准化与一致性:
- 定义了跨平台一致的数据类型
- 确保了不同模块间的接口兼容性
- 提高了代码的可移植性和可重用性
-
类型安全与可靠性:
- 使用固定宽度的整型避免了平台相关的不确定性
- 明确定义了每种类型的值范围
- 减少了类型不匹配导致的潜在错误
-
C++映射:
- 所有AUTOSAR平台类型都有明确到C++类型的映射
- 整型类型映射到
<cstdint>
头文件中的固定宽度类型 - 基本类型(bool、float、double)映射到C++内置类型
-
元模型设计:
- 采用面向对象的设计原则构建类型系统
- 支持类型的继承、组合和引用关系
- 为复杂数据类型的定义提供了统一框架
通过这些标准化的平台类型,AUTOSAR自适应平台为汽车软件开发提供了一个可靠、一致和跨平台的基础,使开发人员能够专注于应用逻辑而不必担心底层数据类型的兼容性问题。