RealView® 编译工具 开发指南

3.1 版


Table of Contents

前言
关于本手册
适用对象
使用本手册
印刷约定
更多参考出版物
反馈
对 RealView 编译工具的反馈
关于本手册的反馈
1. 简介
1.1. 关于 RVCT
1.1.1. 使用示例
1.2. 为 ARM 处理器开发代码
1.2.1. 嵌入式软件开发
1.2.2. ARM 与 Thumb 代码交互
1.2.3. 混合使用 C、C++ 和汇编语言
1.2.4. 处理处理器异常
1.2.5. 使用 AAPCS
1.2.6. 与旧对象和库的兼容性
2. 嵌入式软件开发
2.1. 关于嵌入式软件开发
2.1.1. 示例代码
2.2. 目标系统未知情况下的缺省编译工具行为
2.2.1. 半主机
2.2.2. C 库结构
2.2.3. 缺省内存映射
2.2.4. 链接器放置规则
2.2.5. 应用程序启动
2.2.6. 编译代码 1 的示例代码
2.3. 调整 C 库以使其适应目标硬件
2.3.1. 重定向 C 库的目标
2.3.2. 避免使用 C 库半主机
2.3.3. 编译代码 2 的示例代码
2.4. 调整映像内存映射以使其适应目标硬件
2.4.1. 分散加载
2.4.2. 分散加载描述文件语法
2.4.3. 分散加载描述文件示例
2.4.4. 在分散加载描述文件中放置对象
2.4.5. 根区
2.4.6. 放置栈和堆
2.4.7. 运行时内存模型
2.4.8. 编译代码 3 的示例代码
2.4.9. ARMv6-M 和 ARMv7-M 内存映射
2.5. 重置和初始化
2.5.1. 初始化序列
2.5.2. 向量表
2.5.3. ROM/RAM 重映射
2.5.4. 局部存储器设置的注意事项
2.5.5. 分散加载和内存设置
2.5.6. 栈指针初始化
2.5.7. 硬件初始化
2.5.8. 执行模式的注意事项
2.5.9. 编译代码 4 的示例代码
2.6. 内存映射的其他注意事项
2.6.1. 在分散加载描述文件中定位目标外设
2.6.2. 编译代码 5 的示例代码
3. 编写与位置无关的代码和数据
3.1. 与位置无关
3.1.1. 使用 AAPCS
3.2. 只读且与位置无关
3.2.1. ROPI 的寄存器用法
3.2.2. 编写 ROPI 的 C 和汇编程序代码
3.2.3. 链接代码
3.2.4. FPIC 寻址
3.2.5. 代码示例
3.3. 读写且与位置无关
3.3.1. 可重入例程
3.3.2. RWPI 的寄存器用法
3.3.3. 与位置无关的数据寻址
3.3.4. 编写汇编语言的 RWPI
3.3.5. 链接代码
3.3.6. 代码示例
4. 交互操作 ARM 和 Thumb
4.1. 关于交互操作
4.1.1. 使用 AAPCS
4.1.2. 何时使用交互操作
4.1.3. 使用 /interwork 选项
4.1.4. 检测交互操作调用
4.1.5. 链接器生成的胶合代码
4.2. 汇编语言交互操作
4.2.1. 跳转和交换指令
4.2.2. 更改汇编程序模式
4.2.3. ARM 头文件示例
4.2.4. 与 ARM 体系结构 v5T 和更高版本交互操作
4.2.5. Thumb 代码中的标签
4.3. C 和 C++ 交互操作和胶合代码
4.3.1. 编译用于交互操作的代码
4.3.2. C 和 C++ 交互操作的基本规则
4.3.3. Thumb 状态下函数的指针
4.3.4. 使用同一函数的两个版本
4.4. 使用胶合代码的汇编语言交互操作
4.4.1. 使用胶合代码的汇编间交互操作
4.4.2. 使用胶合代码的 C、C++ 和汇编语言交互操作
5. 混合使用 C、C++ 和汇编语言
5.1. 使用内联汇编程序和嵌入式汇编程序
5.1.1. 内联汇编程序的功能
5.1.2. 嵌入式汇编程序的功能
5.1.3. 内联汇编代码与嵌入式汇编代码之间的差异
5.2. 在汇编代码中访问 C 全局变量
5.3. 在 C++ 中使用 C 头文件
5.3.1. 包含系统 C 头文件
5.3.2. 包含您自己的 C 头文件
5.4. C、C++ 和 ARM 汇编语言交叉调用
5.4.1. 语言交叉调用的一般规则
5.4.2. C++ 的特定信息
5.4.3. 语言交叉调用的示例
6. 处理处理器异常
6.1. 关于处理器异常
6.1.1. 异常类型
6.1.2. 向量表
6.1.3. 异常使用的模式和寄存器
6.1.4. 异常优先级
6.2. 确定处理器状态
6.3. 进入和退出异常
6.3.1. 处理器对异常的响应
6.3.2. 从异常处理程序返回
6.3.3. 返回地址和返回指令
6.4. 处理异常
6.5. 安装异常处理程序
6.5.1. 安装异常处理程序的方法
6.5.2. 在重置时安装处理程序
6.5.3. 从 C 安装处理程序
6.6. SVC 处理程序
6.6.1. 确定要调用的 SVC
6.6.2. 汇编语言编写的 SVC 处理程序
6.6.3. C 语言和汇编语言编写的 SVC 处理程序
6.6.4. 在超级用户模式下使用 SVC
6.6.5. 从应用程序调用 SVC
6.6.6. 从应用程序动态调用 SVC
6.7. 中断处理程序
6.7.1. 外部中断的级数
6.7.2. C 语言编写的简单中断处理程序
6.7.3. 重入中断处理程序
6.7.4. 汇编语言编写的中断处理程序示例
6.8. 重置处理程序
6.9. 未定义指令处理程序
6.10. 预取中止处理程序
6.11. 数据中止处理程序
6.12. 系统模式
7. 处理 Cortex-M3 处理器异常
7.1. 关于 Cortex-M3 处理器异常
7.1.1. 操作模式和执行模式
7.1.2. 主堆栈和进程堆栈
7.1.3. 异常编号
7.1.4. 向量表
7.1.5. 事件
7.1.6. 异常优先级和抢先能力
7.1.7. 嵌套向量中断控制器
7.2. 编写异常表
7.3. 编写异常处理程序
7.4. 放置异常表
7.5. 配置系统控制空间寄存器
7.6. 配置单个 IRQ
7.6.1. 中断优先级
7.7. 超级用户调用
7.8. 系统计时器
7.8.1. 配置 SysTick
7.9. 移植为其他 ARM 处理器编写的异常处理代码
7.9.1. 关键段和异常行为
8. 调试通信通道
8.1. 关于调试通信通道
8.2. 目标数据传送
8.3. 轮询调试通信
8.3.1. 通信数据控制寄存器
8.3.2. 目标到调试器的通信
8.3.3. 调试器到目标的通信
8.4. 中断驱动调试通信
8.5. 从 Thumb 状态访问
A. 半主机
A.1. 关于半主机
A.1.1. 什么是半主机?
A.1.2. 半主机接口
A.2. 半主机实现
A.2.1. RealView ARMulator ISS
A.2.2. RealView ICE
A.2.3. 指令集系统模型
A.2.4. RealMonitor
A.3. 半主机操作
A.3.1. angel_SWIreason_EnterSVC (0x17)
A.3.2. angel_SWIreason_ReportException (0x18)
A.3.3. SYS_CLOSE (0x02)
A.3.4. SYS_CLOCK (0x10)
A.3.5. SYS_ELAPSED (0x30)
A.3.6. SYS_ERRNO (0x13)
A.3.7. SYS_FLEN (0x0C)
A.3.8. SYS_GET_CMDLINE (0x15)
A.3.9. SYS_HEAPINFO (0x16)
A.3.10. SYS_ISERROR (0x08)
A.3.11. SYS_ISTTY (0x09)
A.3.12. SYS_OPEN (0x01)
A.3.13. SYS_READ (0x06)
A.3.14. SYS_READC (0x07)
A.3.15. SYS_REMOVE (0x0E)
A.3.16. SYS_RENAME (0x0F)
A.3.17. SYS_SEEK (0x0A)
A.3.18. SYS_SYSTEM (0x12)
A.3.19. SYS_TICKFREQ (0x31)
A.3.20. SYS_TIME (0x11)
A.3.21. SYS_TMPNAM (0x0D)
A.3.22. SYS_WRITE (0x05)
A.3.23. SYS_WRITEC (0x03)
A.3.24. SYS_WRITE0 (0x04)
A.4. 调试代理交互 SVC

所有权声明

带有 ®™ 标记的词语和徽标是 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 3.0 的 3.0 版
Revision H 2007 年 3 月 RVDS 3.1 的 3.1 版
Copyright © 2002-2007 ARM Limited. All rights reserved. ARM DUI 0203HC
Non-Confidential