RealView® 编译工具 编译器用户指南

3.1 版


Table of Contents

前言
关于本手册
适用对象
使用本手册
印刷约定
更多参考出版物
反馈
《RealView 编译工具》的反馈信息
关于本手册的反馈
1. 简介
1.1. 关于 ARM 编译器
1.2. 源语言模式
1.3. C 和 C++ 库
1.4. C99 的新功能
1.4.1. 语言功能
1.4.2. 库功能
2. ARM 编译器使用入门
2.1. 使用命令行选项
2.1.1. 调用 ARM 编译器
2.1.2. 排序命令行选项
2.1.3. 使用环境变量指定命令行选项
2.1.4. 自动完成命令行选项
2.1.5. 从文件读取编译器选项
2.1.6. 指定键盘输入
2.2. 文件命名约定
2.2.1. 可移植性
2.2.2. 输出文件
2.3. 包含文件
2.3.1. 当前位置
2.3.2. RVCT31INC 环境变量
2.3.3. 搜索路径
2.3.4. TMP 和 TMPDIR 环境变量
2.4. 预编译的头文件
2.4.1. 自动 PCH 处理
2.4.2. 手动 PCH 处理
2.4.3. 控制 PCH 处理期间的消息输出
2.4.4. 性能问题
2.5. 指定目标处理器或体系结构
2.5.1. NEON 技术
2.6. 指定过程调用标准 (AAPCS)
2.6.1. 交互操作限定符
2.6.2. 与位置无关的限定符
2.7. 使用链接器反馈
2.8. 添加符号版本
2.9. 线程局部存储
2.10. 8 字节对齐功能
3. 编译器功能
3.1. 内在函数
3.1.1. 关于内在函数
3.1.2. 指令内在函数
3.1.3. ETSI 基本运算
3.1.4. TI C55x 内在函数
3.1.5. 已命名的寄存器变量
3.1.6. NEON 内在函数
3.2. 编译指示
4. 编码惯例
4.1. 优化代码
4.1.1. 大小与速度的优化
4.1.2. 优化级别和调试视图
4.1.3. 选择目标 CPU
4.1.4. 优化循环
4.1.5. 使用 volatile
4.2. 代码度量
4.2.1. 测量代码和数据大小
4.2.2. 测量堆栈使用
4.2.3. 减少对象和库中的调试信息
4.3. 函数
4.3.1. 将参数传递开销最小化
4.3.2. __value_in_regs
4.3.3. __pure
4.3.4. 放置 ARM 函数限定符
4.4. 内联
4.4.1. 编译器如何确定内联
4.4.2. 什么时候才适合编译器执行内联?
4.4.3. 管理内联
4.4.4. 在多个文件之间内联函数
4.4.5. 调试数据和 --[no]_inline 关键字
4.4.6. 将函数标记为静态
4.4.7. 在 ROM 映像中的内联函数上设置断点
4.5. 对齐数据
4.5.1. 关于数据对齐
4.5.2. __packed 限定符和对数据的未对齐访问
4.5.3. __packed 结构与单个 __packed 字段
4.6. 使用浮点算法
4.6.1. 浮点运算的支持
4.6.2. VFP 体系结构
4.6.3. --fpu 选项
4.6.4. 浮点链接
4.6.5. --fpmode 选项
4.6.6. 使用 --fpu 选项
4.6.7. VFP 支持
4.7. 捕获和标识除零错误
4.7.1. 整数除零
4.7.2. (软件)浮点除零
4.8. 对 ARM 体系结构 v6 的支持
4.8.1. 指令生成
4.8.2. 对齐支持
4.8.3. 端支持
5. 诊断消息
5.1. 重定向诊断
5.2. 诊断消息的严重性
5.3. 控制诊断消息的输出
5.4. 更改诊断消息的严重性
5.5. 禁止显示诊断消息
5.6. 诊断消息中的前缀字母
5.7. 使用 -W 禁止显示警告消息
5.8. 退出状态代码和终止消息
5.8.1. 信号反应
5.8.2. 退出状态
5.9. 数据流警告
6. 使用嵌入式汇编程序和嵌入式汇编
6.1. 内联汇编程序
6.1.1. 内联汇编程序语法
6.1.2. 内联汇编操作的限制
6.1.3. 虚拟寄存器
6.1.4. 常数
6.1.5. 指令扩展
6.1.6. 条件标记
6.1.7. 操作数
6.1.8. 函数调用和跳转
6.1.9. 标签
6.1.10. 与先前版本 ARM C/C++ 编译器的差异
6.2. 嵌入式汇编程序
6.2.1. 嵌入式汇编程序语法
6.2.2. 嵌入式汇编程序的限制
6.2.3. 嵌入式汇编表达式和 C 或 C++ 表达式之间的差异
6.2.4. 嵌入式汇编程序的生成
6.2.5. __cpp 关键字
6.2.6. 手动解决重载
6.2.7. 相关基类的关键字
6.2.8. 成员函数类的关键字
6.2.9. 调用非静态成员函数
6.2.10. 与先前版本 ARM C/C++ 编译器的差异
6.3. 访问 sp、lr 或 pc 的旧嵌入式汇编程序
6.3.1. 访问旧代码中的 sp (r13)、lr (r14) 和 pc (r15)
6.4. 内联汇编代码与嵌入式汇编代码之间的差异
A. 使用旧命令行选项
A.1. 使用旧版本工具名称调用 ARM 编译器
A.2. 从 ADS 1.2 移植命令行选项
A.2.1. 将 ADS 1.2 编译器选项映射到新版本
A.2.2. 控制新版本中的 ADS 1.2 诊断消息
A.3. 从 RVCT 2.2 和 RVCT 3.0 移植命令行选项
A.3.1. 将 RVCT 2.2 编译器选项映射到新版本
A.3.2. 将 RVCT 3.0 编译器选项映射到新版本
A.4. RVCT 中旧选项的警告消息
A.5. 获得更多信息

所有权声明

带有 ®™ 标记的词语和徽标是 ARM 公司的注册商标或商标。 此处提及的其他品牌和名称可能是其相关所有者的商标。

除非事先得到版权所有人的书面许可,否则不得以任何形式修改或复制本文档包含的部分或全部信息以及产品说明。

本文档描述的产品还将不断发展和完善。 ARM 公司将如实提供本文档所述产品的所有特性及其使用方法。 但是,所有暗示或明示的担保,包括但不限于对特定用途适销性或适用性的担保,均不包括在内。

本文档的目的仅在于帮助读者使用产品。 对由于使用本文档任何信息出现的遗漏、损坏或错误使用产品造成的任何损失,ARM 公司概不负责。

使用 ARM 一词时,它表示“ARM 或其任何相应的子公司”。

保密状态

本文档的内容是非保密的。 根据 ARM 与 ARM 将本文档交予的参与方的协议条款,使用、复制和公开本文档内容的权利可能会受到许可限制的制约。

产品状态

本文档的信息是开发的产品的最新信息。

Revision History
Revision A 2002 年 8 月 1.2 版
Revision B 2003 年 1 月 2.0 版
Revision C 2003 年 9 月 RVDS v2.0 的 2.0.1 版
Revision D 2004 年 1 月 RVDS v2.1 的 2.1
Revision E 2004 年 12 月 RVDS v2.2 的 2.2 版
Revision F 2005 年 5 月 RVDS v2.2 SP1 的 2.2 版
Revision G 2006 年 3 月 RVDS v3.0 的 3.0 版
Revision H 2007 年 3 月 RVDS v3.1 的 3.1 版
Copyright © 2002-2007 ARM Limited. All rights reserved. ARM DUI 0205HC
Non-Confidential