273 lines
8.5 KiB
Markdown
273 lines
8.5 KiB
Markdown
# 编译器抽象规范
|
||
|
||
> **AUTOSAR CP Release 4.4.0**
|
||
>
|
||
> 原文:*Specification of Compiler Abstraction*(文档 ID 051)
|
||
>
|
||
> 翻译状态:**已完成 v1**
|
||
>
|
||
> 对应原文 PDF:`BSWGeneral/AUTOSAR_SWS_CompilerAbstraction.pdf`
|
||
|
||
---
|
||
|
||
## 文档标识
|
||
|
||
| 字段 | 值 |
|
||
|------|-----|
|
||
| 文档标题 | 编译器抽象规范(Specification of Compiler Abstraction) |
|
||
| 文档标识号 | 051 |
|
||
| 文档状态 | 正式版(Final) |
|
||
| 所属标准 | Classic Platform |
|
||
| 所属版本 | 4.4.0 |
|
||
|
||
---
|
||
|
||
## 文档变更历史(节选)
|
||
|
||
| 日期 | 版本 | 变更说明 |
|
||
|------|------|----------|
|
||
| 2018-10-31 | 4.4.0 | 编辑性修订 |
|
||
| 2017-12-08 | 4.3.1 | 编辑性修订;澄清模块特定内存类和全局内存类 |
|
||
| 2016-11-30 | 4.3.0 | 移除 Variants 章节;移除过时元素 |
|
||
| 2015-07-31 | 4.2.2 | 清理需求追踪;澄清编译器符号列表 |
|
||
| 2014-10-31 | 4.2.1 | 编译器符号定义不允许包含值;重构文档结构;移除 MISRA/C/C++ 引用;修正引用 |
|
||
| 2013-03-15 | 4.1.1 | 新增 `CONSTP2FUNC` 抽象宏(指向函数的常量指针);改进与 Memory Mapping 的一致性 |
|
||
| 2011-12-22 | 4.0.3 | 新增 `FUNC_P2CONST` 和 `FUNC_P2VAR` 宏;新增 `REGSPACE` 指针类(用于寄存器访问) |
|
||
| 2010-02-02 | 3.1.4 | 编译器抽象扩展以适用于软件组件;移除 `STATIC` 声明关键字;新增 `LOCAL_INLINE` 关键字(用于 `static inline` 函数实现) |
|
||
|
||
---
|
||
|
||
## 1 介绍与功能概述
|
||
|
||
本文档规定 **AUTOSAR 编译器抽象**。编译器抽象的目标是为 AUTOSAR 软件组件和 BSW 模块提供**独立于具体编译器**的关键字、宏和类型定义。
|
||
|
||
通过使用 `Compiler.h` 中定义的抽象宏(如 `FUNC`、`P2VAR`、`CONST` 等),代码可在不同编译器间移植。
|
||
|
||
**重要**:本文档**只规范抽象宏的定义**,**不**规范宏的**值**(值由编译器厂商在 `Compiler_Cfg.h` 中提供)。
|
||
|
||
---
|
||
|
||
## 2 相关文档
|
||
|
||
| 编号 | 名称 | 文件 |
|
||
|------|------|------|
|
||
| [1] | General Requirements on Basic Software Modules | `AUTOSAR_SRS_BSWGeneral.pdf` |
|
||
| [2] | General Specification of Basic Software Modules | `AUTOSAR_SWS_BSWGeneral.pdf` |
|
||
| [3] | Specification of Platform Types | `AUTOSAR_SWS_PlatformTypes.pdf` |
|
||
| [4] | Specification of Standard Types | `AUTOSAR_SWS_StandardTypes.pdf` |
|
||
| [5] | Specification of Memory Mapping | `AUTOSAR_SWS_MemoryMapping.pdf` |
|
||
| [6] | ISO/IEC 9899:1990 Programming Language – C | — |
|
||
| [7] | ISO/IEC 14882:2003 Programming Language – C++ | — |
|
||
|
||
---
|
||
|
||
## 3 约束与假设
|
||
|
||
### 3.1 限制
|
||
无。
|
||
|
||
### 3.2 对车辆域的适用性
|
||
适用于所有车辆域。
|
||
|
||
---
|
||
|
||
## 4 对其他模块的依赖
|
||
|
||
| 模块 | 说明 |
|
||
|------|------|
|
||
| `Platform_Types.h` | 提供 `boolean`、`uint8` 等基础类型 |
|
||
| `Compiler_Cfg.h` | 编译器特定配置(由编译器厂商提供) |
|
||
|
||
---
|
||
|
||
## 5 需求追踪
|
||
|
||
> 约 30 项 SRS_BSW_* 需求追踪。完整列表参见英文原版 PDF 第 13-17 页。
|
||
|
||
---
|
||
|
||
## 6 文件结构
|
||
|
||
### 6.1 代码文件结构
|
||
本模块是**纯头文件**模块,不提供 `.c` 文件。
|
||
|
||
### 6.2 头文件结构
|
||
|
||
```
|
||
Compiler.h (本文档规范)
|
||
├── 关键字(关键字抽象)
|
||
│ ├── FUNC(rettype, memclass) 函数定义
|
||
│ ├── FUNC_P2CONST(rettype, ...) 返回 const 指针的函数
|
||
│ ├── FUNC_P2VAR(rettype, ...) 返回 var 指针的函数
|
||
│ ├── CONSTP2CONST(type, memclass, ptrclass) 指向 const 的 const 指针
|
||
│ ├── CONSTP2VAR(type, memclass, ptrclass) 指向 var 的 const 指针
|
||
│ ├── CONSTP2FUNC(type, memclass, ptrclass) 指向函数的 const 指针
|
||
│ ├── P2CONST(type, memclass, ptrclass) 指向 const 的指针
|
||
│ ├── P2VAR(type, memclass, ptrclass) 指向 var 的指针
|
||
│ ├── P2FUNC(type, memclass, ptrclass) 指向函数的指针
|
||
│ ├── CONST(type, memclass) const 限定符
|
||
│ ├── VAR(type, memclass) var 限定符
|
||
│ ├── LOCAL_INLINE static inline 关键字
|
||
│ └── _ (关键字本身由编译器实现)
|
||
└── 类型
|
||
└── NULL_PTR 空指针常量
|
||
```
|
||
|
||
---
|
||
|
||
## 7 API 规范
|
||
|
||
### 7.1 关键字
|
||
|
||
#### 7.1.1 `FUNC`
|
||
|
||
> **[SWS_COMPILER_00046]** `FUNC` 宏用于**函数定义**的抽象:
|
||
> ```c
|
||
> #define FUNC(rettype, memclass) rettype
|
||
> ```
|
||
>
|
||
> 编译器在 `Compiler_Cfg.h` 中按 `memclass` 映射到具体的函数修饰符(如 `static`、`__interrupt` 等)。
|
||
|
||
#### 7.1.2 `FUNC_P2CONST` / `FUNC_P2VAR`
|
||
|
||
> **[SWS_COMPILER_00060]** `FUNC_P2CONST` 宏用于**返回 const 指针的函数**定义:
|
||
> ```c
|
||
> #define FUNC_P2CONST(rettype, ptrclass, memclass) rettype
|
||
> ```
|
||
>
|
||
> **[SWS_COMPILER_00061]** `FUNC_P2VAR` 宏用于**返回 var 指针的函数**定义:
|
||
> ```c
|
||
> #define FUNC_P2VAR(rettype, ptrclass, memclass) rettype
|
||
> ```
|
||
|
||
#### 7.1.3 `P2CONST` / `P2VAR` / `P2FUNC`
|
||
|
||
> **[SWS_COMPILER_00058]** `P2CONST` 宏用于**指向 const 数据的指针**:
|
||
> ```c
|
||
> #define P2CONST(ptrtype, memclass, ptrclass) const ptrtype *
|
||
> ```
|
||
>
|
||
> **[SWS_COMPILER_00059]** `P2VAR` 宏用于**指向 var 数据的指针**:
|
||
> ```c
|
||
> #define P2VAR(ptrtype, memclass, ptrclass) ptrtype *
|
||
> ```
|
||
>
|
||
> **[SWS_COMPILER_00057]** `P2FUNC` 宏用于**指向函数的指针**:
|
||
> ```c
|
||
> #define P2FUNC(ptrtype, memclass, ptrclass) ptrtype (*)
|
||
> ```
|
||
|
||
#### 7.1.4 `CONSTP2CONST` / `CONSTP2VAR` / `CONSTP2FUNC`
|
||
|
||
> **[SWS_COMPILER_00062]** `CONSTP2CONST`:指向 const 数据的 **const 指针**:
|
||
> ```c
|
||
> #define CONSTP2CONST(ptrtype, memclass, ptrclass) const ptrtype * const
|
||
> ```
|
||
>
|
||
> **[SWS_COMPILER_00063]** `CONSTP2VAR`:指向 var 数据的 **const 指针**:
|
||
> ```c
|
||
> #define CONSTP2VAR(ptrtype, memclass, ptrclass) ptrtype * const
|
||
> ```
|
||
>
|
||
> **[SWS_COMPILER_00064]** `CONSTP2FUNC`:指向函数的 **const 指针**:
|
||
> ```c
|
||
> #define CONSTP2FUNC(ptrtype, memclass, ptrclass) ptrtype (* const)
|
||
> ```
|
||
|
||
#### 7.1.5 `CONST` / `VAR`
|
||
|
||
> **[SWS_COMPILER_00065]** `CONST` 宏用于**只读**类型限定:
|
||
> ```c
|
||
> #define CONST(type, memclass) const type
|
||
> ```
|
||
>
|
||
> **[SWS_COMPILER_00066]** `VAR` 宏用于**可读可写**类型限定:
|
||
> ```c
|
||
> #define VAR(type, memclass) type
|
||
> ```
|
||
|
||
#### 7.1.6 `LOCAL_INLINE`
|
||
|
||
> **[SWS_COMPILER_00067]** `LOCAL_INLINE` 宏替代 `static inline` 关键字(自 R3.1.4 起):
|
||
> ```c
|
||
> #define LOCAL_INLINE static inline
|
||
> ```
|
||
|
||
#### 7.1.7 `NULL_PTR`
|
||
|
||
> **[SWS_COMPILER_00039]** 空指针常量:
|
||
> ```c
|
||
> #define NULL_PTR ((void *)0)
|
||
> ```
|
||
|
||
### 7.2 类型
|
||
|
||
无(不定义新类型,仅使用 `Platform_Types.h` 中定义的基础类型)。
|
||
|
||
---
|
||
|
||
## 8 配置规范
|
||
|
||
`Compiler_Cfg.h` 由**编译器厂商**提供,包含所有抽象宏到具体编译器关键字的映射。
|
||
|
||
**示例**(用于某 32 位 MCU 的 C 编译器):
|
||
```c
|
||
/* Compiler_Cfg.h */
|
||
#define AUTOMATIC
|
||
#define TYPEDEF
|
||
#define FUNC(rettype, memclass) rettype
|
||
#define P2VAR(ptrtype, memclass, ptrclass) ptrtype *
|
||
#define CONST(consttype, memclass) const consttype
|
||
#define VAR(vartype, memclass) vartype
|
||
```
|
||
|
||
---
|
||
|
||
## 9 序列图
|
||
|
||
不适用。
|
||
|
||
---
|
||
|
||
## 10 不适用的需求
|
||
|
||
> **[SWS_COMPILER_00999]** 这些需求**不适用于**本规范。
|
||
>
|
||
> 不适用的 SRS_BSW 需求包括调度、资源使用、错误处理、模块初始化等。
|
||
|
||
---
|
||
|
||
## 11 关键字使用示例
|
||
|
||
```c
|
||
/* 示例:使用编译器抽象的函数声明 */
|
||
#define CAN_START_SEC_CODE
|
||
#include "Can_MemMap.h" /* 来自 Memory Mapping 规范 */
|
||
|
||
FUNC(void, CAN_CODE) Can_Write(
|
||
P2VAR(Can_HwHandleType, AUTOMATIC, APPL_DATA) Hth,
|
||
P2CONST(PduInfoType, AUTOMATIC, CAN_APPL_DATA) PduInfo
|
||
);
|
||
|
||
#define CAN_STOP_SEC_CODE
|
||
#include "Can_MemMap.h"
|
||
```
|
||
|
||
其中:
|
||
- `FUNC(void, CAN_CODE)` 定义返回 `void`、存储类为 `CAN_CODE` 的函数
|
||
- `P2VAR(..., AUTOMATIC, APPL_DATA)` 定义指向 `Can_HwHandleType` 的指针(自动存储、APPL_DATA 指针类)
|
||
- `P2CONST(..., AUTOMATIC, CAN_APPL_DATA)` 定义指向 `PduInfoType` 的 const 指针
|
||
|
||
---
|
||
|
||
## 翻译说明
|
||
|
||
- 本文档为**编译器抽象宏规范**,核心是 C 宏定义
|
||
- 所有宏名(`FUNC`、`P2VAR`、`CONST` 等)保持英文
|
||
- 内存类(`CAN_CODE`)、指针类(`APPL_DATA`、`CAN_APPL_DATA`)由具体模块在 `Compiler_Cfg.h` 中定义
|
||
- 编译器抽象与 Memory Mapping 紧密相关(见 `AUTOSAR_SWS_MemoryMapping.pdf`)
|
||
|
||
---
|
||
|
||
*翻译:opencode-translator / Step 3 P0 批量翻译*
|