AUTOSAR图解==>AUTOSAR_SWS_PlatformTypes
AUTOSAR 平台类型详解
目录
- 1. 概述
- 2. 平台类型系统
- 2.1 标准整数类型
- 2.2 优化整数类型
- 2.3 浮点类型
- 2.4 布尔类型
- 2.5 系统符号定义
- 3. 平台类型映射
- 3.1 处理器架构差异
- 3.2 映射规则
- 4. 大小端与字节序
- 4.1 位序(寄存器级别)
- 4.2 字节序(内存级别)
- 4.3 实际应用举例
- 5. 总结
1. 概述
AUTOSAR平台类型(Platform Types)是AUTOSAR标准的基础组成部分,定义了一套跨平台的数据类型系统,确保汽车软件在不同处理器架构和编译环境下的可移植性。
根据AUTOSAR规范文档所述:“所有平台类型文件在AUTOSAR社区中必须是唯一的,以保证每个平台的类型唯一性,并避免在将软件模块从平台A移至平台B时发生类型变更。”
平台类型的主要目标是:
- 平台独立性:抽象底层硬件差异
- 编译器独立性:避免不同编译器的实现差异
- 类型安全:提供明确定义的数据类型范围
- 可移植性:确保代码可以跨平台重用
这些类型在PlatformTypes.h
头文件中定义,所有基础软件模块都必须使用这些AUTOSAR类型而非本地C数据类型。
2. 平台类型系统
AUTOSAR平台类型系统包含了多种数据类型,分为几个主要类别:标准整数类型、优化整数类型、浮点类型、布尔类型以及系统符号定义。
2.1 标准整数类型
标准整数类型是AUTOSAR中最基本的数值表示类型,具有固定的位宽和值范围:
类型名称 | 位宽 | 值范围 | 说明 |
---|---|---|---|
uint8 | 8位 | 0…255 | 无符号8位整数 |
uint16 | 16位 | 0…65535 | 无符号16位整数 |
uint32 | 32位 | 0…4294967295 | 无符号32位整数 |
uint64 | 64位 | 0…18446744073709551615 | 无符号64位整数 |
sint8 | 8位 | -128…+127 | 有符号8位整数 |
sint16 | 16位 | -32768…+32767 | 有符号16位整数 |
sint32 | 32位 | -2147483648…+2147483647 | 有符号32位整数 |
sint64 | 64位 | -9223372036854775808…+9223372036854775807 | 有符号64位整数 |
规范要求:
- 所有有符号整数类型只支持2的补码算术实现
- 类型范围必须严格遵循规范定义
2.2 优化整数类型
优化整数类型提供了至少满足指定范围的整数类型,允许在不同平台上进行优化:
类型名称 | 最小值范围 | 说明 |
---|---|---|
uint8_least | 至少 0…255 | 至少8位无符号整数 |
uint16_least | 至少 0…65535 | 至少16位无符号整数 |
uint32_least | 至少 0…4294967295 | 至少32位无符号整数 |
sint8_least | 至少 -128…+127 | 至少8位有符号整数 |
sint16_least | 至少 -32768…+32767 | 至少16位有符号整数 |
sint32_least | 至少 -2147483648…+2147483647 | 至少32位有符号整数 |
应用场景:
- 循环计数器(如最大循环计数为124,使用uint8_least)
- switch-case参数(如最大状态数为17,使用uint8_least)
2.3 浮点类型
AUTOSAR定义了符合IEEE 754-2008标准的浮点类型:
类型名称 | 格式 | 范围 |
---|---|---|
float32 | IEEE 754-2008 binary32 | -3.4028235e+38…+3.4028235e+38 |
float64 | IEEE 754-2008 binary64 | -1.7976931348623157e+308…+1.7976931348623157e+308 |
2.4 布尔类型
AUTOSAR布尔类型有特殊的使用规则:
类型名称 | 值 | 说明 |
---|---|---|
boolean | TRUE (1), FALSE (0) | 实现为无符号整数 |
使用限制:
- 只能与TRUE和FALSE一起使用
- 只允许使用 ==, !=, !, &&, || 操作符
- 不允许使用算术或位操作符(+, ++, -, --, *, /, %, <<, >>, ~, &)
- 变量赋值只允许以下形式:
- var = TRUE; 或 var = FALSE;
- var = (a < b); // 同样适用于">", “<=”, “>=”
- var = (c && d); // 同样适用于"!", “||”
- var = (e != f); // 同样适用于"=="
2.5 系统符号定义
系统符号定义用于描述目标处理器的特性:
符号名称 | 可能值 | 说明 |
---|---|---|
CPU_TYPE | CPU_TYPE_8 (8) CPU_TYPE_16 (16) CPU_TYPE_32 (32) CPU_TYPE_64 (64) | 定义处理器位宽 |
CPU_BIT_ORDER | MSB_FIRST (0) LSB_FIRST (1) | 定义寄存器级别的位顺序 |
CPU_BYTE_ORDER | HIGH_BYTE_FIRST (0) LOW_BYTE_FIRST (1) | 定义内存级别的字节顺序 |
下图展示了AUTOSAR平台类型系统的完整结构:
3. 平台类型映射
3.1 处理器架构差异
不同处理器架构具有不同的特性,AUTOSAR平台类型必须映射到各种处理器架构的本地C类型:
16位处理器:
- Freescale S12X
- ST Microelectronics ST10
- Renesas M16C/M32C
32位处理器:
- STMicroelectronics ST30
- NEC V850
- Freescale MPC5554
- Infineon TC1796/TC1766
64位处理器:
- ARM Cortex A53
3.2 映射规则
映射规则遵循以下原则:
- 每个AUTOSAR类型必须映射到本地类型
- 映射必须保证类型值范围的正确性
- 映射必须在PlatformTypes.h中明确定义
- 映射考虑处理器位宽、字节序和位序特性
典型映射示例:
AUTOSAR类型 | 16位处理器 | 32位处理器 | 64位处理器 |
---|---|---|---|
boolean | unsigned char | unsigned char | unsigned char |
uint8 | unsigned char | unsigned char | unsigned char |
uint16 | unsigned short | unsigned short | unsigned short |
uint32 | unsigned long | unsigned long | unsigned int |
uint64 | unsigned long long | unsigned long long | unsigned long long |
sint8 | signed char | signed char | signed char |
sint16 | signed short | signed short | signed short |
sint32 | signed long | signed long | signed int |
sint64 | signed long long | signed long long | signed long long |
下图展示了AUTOSAR平台类型在不同处理器架构上的映射关系:
4. 大小端与字节序
4.1 位序(寄存器级别)
位序定义了在寄存器中比特位的排列顺序:
MSB_FIRST(大端位序):
- 位0是最低有效位 (LSB)
- 位7是最高有效位 (MSB)
- 在Motorola等处理器架构中使用
LSB_FIRST(小端位序):
- 位0是最低有效位 (LSB)
- 位7是最高有效位 (MSB)
- 大多数处理器使用此方式
AUTOSAR规范中特别强调:“位0、位1等的命名约定与字节、字等内的位的重要性是不同的主题,不应混淆。”
4.2 字节序(内存级别)
字节序定义了多字节数据在内存中的存储顺序:
HIGH_BYTE_FIRST(大端字节序):
- 最高有效字节 (MSB) 存储在低地址
- 最低有效字节 (LSB) 存储在高地址
- 如Motorola、PowerPC等处理器使用
LOW_BYTE_FIRST(小端字节序):
- 最低有效字节 (LSB) 存储在低地址
- 最高有效字节 (MSB) 存储在高地址
- 如Intel x86、ARM等处理器使用
4.3 实际应用举例
以16位整数 0x1234 为例:
大端存储:
- 地址 n: 0x12 (MSB)
- 地址 n+1: 0x34 (LSB)
小端存储:
- 地址 n: 0x34 (LSB)
- 地址 n+1: 0x12 (MSB)
AUTOSAR规范要求在PlatformTypes.h中必须为每个处理器平台定义CPU_BIT_ORDER和CPU_BYTE_ORDER,这些定义保证了数据在不同平台间的可移植性。
下图详细展示了大小端与字节序的概念:
5. 总结
AUTOSAR平台类型系统是AUTOSAR标准中的基础组件,它通过以下方式确保汽车软件的可移植性和稳定性:
- 标准化数据类型:定义了固定范围的整数、浮点和布尔类型
- 平台抽象:通过将标准类型映射到不同处理器架构的本地类型
- 大小端处理:明确处理不同处理器架构的位序和字节序差异
- 类型安全:通过严格的类型定义和使用规则提高代码安全性
所有AUTOSAR基础软件模块必须使用这些标准化的平台类型而非直接使用本地C数据类型,这确保了软件在不同处理器架构之间移植时不会因类型定义不同而出现问题。
平台类型系统是AUTOSAR软件架构中不可或缺的基础设施,为上层应用提供了坚实的类型系统支持。