AUTOSAR图解==>AUTOSAR_AP_SWS_PlatformTypes

AUTOSAR自适应平台类型规范详解

AUTOSAR Adaptive Platform - Specification of Platform Types

目录


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元模型中的位置和关系:

  1. 继承关系

    • CppImplementationDataType继承自Referrable
    • StdCppImplementationDataType继承自CppImplementationDataType
  2. 组合关系

    • ARPackage通过element属性组合CppImplementationDataType
    • CppImplementationDataType可以包含CppImplementationDataTypeElement子元素
  3. 自引用关系

    • CppImplementationDataType可以通过typeReference引用其他CppImplementationDataType
  4. 使用关系

    • ServiceInterface使用StdCppImplementationDataType定义接口

这种元模型设计使得AUTOSAR能够在统一框架下定义各种复杂的数据类型,并保持类型系统的一致性和可扩展性。

2.3 平台类型到C++的映射关系

AUTOSAR平台类型需要映射到实际的C++类型以便在代码中使用。下图展示了这种映射关系:

在这里插入图片描述

从图中可以看出:

  1. 基本类型映射

    • AUTOSAR bool类型映射到C++的内置bool类型
    • AUTOSAR浮点类型映射到对应的C++内置类型(floatdouble
  2. 整型类型映射

    • 所有AUTOSAR整型类型(有符号和无符号)都映射到<cstdint>头文件中的对应类型
    • 这确保了跨平台的二进制兼容性和一致的数据宽度

这种映射机制确保了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属性设置为VALUE
  • typeEmitter设置为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

对于floatdouble类型,需要注意如果typeEmitter设置为非TYPE_EMITTER_ARA的值,则ARA生成器不会生成相应的数据类型定义。


4. 总结

AUTOSAR自适应平台的平台类型规范提供了一组标准化的原始数据类型,这些类型在AUTOSAR应用程序开发中发挥着重要作用:

  1. 标准化与一致性

    • 定义了跨平台一致的数据类型
    • 确保了不同模块间的接口兼容性
    • 提高了代码的可移植性和可重用性
  2. 类型安全与可靠性

    • 使用固定宽度的整型避免了平台相关的不确定性
    • 明确定义了每种类型的值范围
    • 减少了类型不匹配导致的潜在错误
  3. C++映射

    • 所有AUTOSAR平台类型都有明确到C++类型的映射
    • 整型类型映射到<cstdint>头文件中的固定宽度类型
    • 基本类型(bool、float、double)映射到C++内置类型
  4. 元模型设计

    • 采用面向对象的设计原则构建类型系统
    • 支持类型的继承、组合和引用关系
    • 为复杂数据类型的定义提供了统一框架

通过这些标准化的平台类型,AUTOSAR自适应平台为汽车软件开发提供了一个可靠、一致和跨平台的基础,使开发人员能够专注于应用逻辑而不必担心底层数据类型的兼容性问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KaiGer666

慧眼~施主!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值