当前位置:文档之家› 从ADS到RealViewMDK_上_

从ADS到RealViewMDK_上_

2. 3 ARM ABI 的变化
ARM ABI 是 Application Binary Interface for t he ARM Architect ure 的简称 ,是一系列 ARM 体系架构标准 的集合 ,囊括了 ARM 二进制代码交互 、开发工具以及操 作系统等方面 。
对目标文件进行链接之前 , MD K 工具的链接器会严 格检查各个目标文件 (object s) ,判断它们是否复合 ARM 体系结构的 ABI 标准 。而 MD K 与 ADS 编译 、链接工具 所遵循的 ARM ABI 是不同版本的 ,所以将 ADS 的遗留 工程直接移植到 MD K 并进行链接时 ,用户可能会遇到如 下的错误或者警告 : Error : L6238 E : foo. o ( . text ) contains invalid call f rom ’ ~
2. 4 分散加载注意事项
MD K 同样支持 ADS 的分散加载文件 ,但是当分散加 载文件中涉及到必须被放置 ROO T Region 中的 C 库函数 时 ,有时用户需要做少量修改 。
ROO T Region 的 load address 与 execution address 相 同 ,所以这部分代码在系统初始化时无需进行搬移操作 , 很多库函数 (如__scatter 3 . o 或者__ dc 3 . o) 必须被放置 在 Root Region 中 。
从 ADS 到 Re alVi e w MD K(上)
■ A RM 中国 姜宁
1 ARM 微控制器开发的新工具
Keil 是颇受业界欢迎的 51 单片机开发工具 ,它拥有 流畅的用户界面与强大的仿真功能 。ARM 将 Keil 公司 收购之后 ,正式推出了针对 ARM 微控制器的开发工具 RealView Microcont roller Develop ment Kit ( 简 称 Real2 View MD K 或者 MD K) ,它将 ARM 开发工具 RealView Develop ment Suite ( 简称 RVDS) 的编译器 RVCT 与 Keil 的工程管理 、调试仿真工具集成在一起 ,是一款非常强大 的 ARM 微控制器开发工具 。
}
paper @mesnet. com. cn (投稿专用)
8 5 2007 年第 9 期 Microcontrollers & Embedded Systems
© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved.
当工程中包含汇编代码时 ,用户可能还需要做少量的 代码修改 。这些修改包括 :
①检查汇编源码中的指令 ,确保堆栈操作指令是 8
字节对齐的 。
例 1 中 ,ADS 的遗留代码一次性将 5 个寄存器压栈 ,
由于 ARM 的指令寄存器宽度为 32 位 (即 4 字节) ,显然 5
个寄存器入栈之后 ,堆栈指针不能够满足 64 位 、8 字节对
当用户没有该 ADS 遗留工程的全部源码 ,只拥有库 文件或者目标文件时 ,可以通过22apcs/ adsabi 编译选项强 制 MD K 的编译器产生复合 ADS ABI 要求的目标文件 , 以达到与遗留的 ADS 库文件 、目标文件兼容的目的 。
注意 : A RM 新工具将不会继续支持22apcs/ adsabi 选项 。建 议用户及时更新工具到最新版本 。
注 :“默认的编译选项”是指在没有其他编译选项时编译 器的缺省选项 。
2. 2 PO SIX 格式
MD K 集成了 RVDS 的编译工具 RVCT , 与 ADS 相 比 ,除去编译 、链接工具的可执行二进制文件不同之外 ,两
8 4
2007 年第 9 期
© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved.
②在每个汇编文件的开头 , 添加“PRESERV E8”指Biblioteka 令 ,见例 2 。例2
A R EA Init , COD E , R EADONL Y ↓
PR ESERV E8
A R EA Init , COD E , R EADONL Y
2. 3. 2 使用22apcs / adsabi 编译选项
对于以上情况 ,用户可以通过简单修改代码并重新编 译 、链接 ,或者使用特殊的编译选项来解决 。
2. 3. 1 重新编译所有代码
当用户拥有该 ADS 遗留工程的所有源代码时 ,使用 MD K 重新编译 、链接全部代码是最好的解决方法 。MD K 中的新版本编译工具会重新生成满足堆栈 8 字节对齐要 求的目标文件 ,避免由于堆栈不对齐引起的链接错误 。
}
; MD K 中的分散加载文件 1
ROM_LOAD 0x0 { ROM_ EXEC 0x0 {
vectors. o (Vect , + First) 3 ( InRoot $$Sections)
} RAM_ EXEC 0x100000 {
}
3 . o ( + RO , + RW , + ZI)
PR ES8’ f unction to ’R EQ8’ f unctio n Warning : L6306W : ’~ PR ES8’ section foo . o ( . text) should not
use t he address of ’R EQ8’ f unction foobar
齐 。为了解决这种问题 ,可以将另外一个并不需要压栈的
寄存器( R12) 同时压栈 ,这样当 6 个 32 位寄存器进栈之
后 ,堆栈就能满足 64 位对齐了 。
例1
S TMFD sp ! , {r02r3 , lr}
;将 R0 ,R1 ,R2 ,R3 ,L R
; (奇数) 寄存器入栈

S TMFD sp ! , {r02r3 , r12 , lr} ; 将偶数个寄存器入栈
adv @mesnet. com. cn (广告专用)
个不同版本编译器的很多编译 、链接选项也有所不同 。有 关编译 、链接选项的变化 ,用户可以参考 ARM 工具文档 “RVCT Compiler and Libraries Guide ”中 的 Table E22 Mapping of compiler options 。
表 1 工具结构对比
工具元件组成
RealView MD K
ADS
工程管理 uVision IDE
CodeWarrior IDE
编译器
ARM C/ C+ + Compiler RVCT ARM C co mpiler for ADS
调试器
uVision Debugger
ARM Extention Degugger ( AXD)
2 工具结构的改进
作为 ARM 的新一代微控制器开发工具 , RealView MD K 不 但 包 含 ARM 的 最 新 版 本 编 译 、链 接 工 具 ( 即 RVDS3. 0 的编译 、链接工具) ,而且根据微控制器调试开
发的特点采用了与 ADS、RVDS 完全不同的调试 、仿真环 境 uVision debugger 与 simulator 。因此 ,MD K 与 ADS 在 工具架构组成上有一些不同 ,这些区别包括 :不同的工程 管理器 ,不同版本的 ARM 编译器 (compiler) ,不同的调试 器( debugger) ,不同的仿真器 ( simulator) ,以及不同的硬 件调试单元 ,详见表 1 。
这是因为新工具的 ABI 要求在函数调用时 ,系统必 须保证堆栈指针 8 字节对齐 ,即每次进栈或者出栈的寄存 器数目必须为偶数 。这是为了能够更加高效地使用 STM 与 LDR 指令对“double”或者“long long”类型的数据进行 访问 。而老的 ARM 开发工具 ADS 并没有考虑到新的 ARM 内核架构 ,其 ABI 对于堆栈的操作仅仅要求 4 字节 对齐 。所以当用户将在 ADS 中编译 、链接成功的工程代 码移植到 MD K 上 ,或者将老的 、ADS 遗留的目标文件 、库 文件在新工具 MD K 中进行链接时 , MD K 的链接器就会 报出以上的错误 。
RVCT 采用了 POSIX 格式的编译 、链接选项 ,所有的 多字符选项前必须使用双中划线 。例如 : ADS 的编译选 项2cp u ,在 MD K 中需要改写成22cpu ,否则用户在 MD K 中 直接使用 ADS 的 makefile 时 ,工具会产生一个如下警告 :
Warning : L3910W : Old syntax , please use ’22cpu’
例 3 分散加载文件的修改 。 ; ADS 中的分散加载文件
ROM_LOAD 0x0 { ROM_ EXEC 0x0 {
vectors. o (Vect , + First) _ _main. o ( + RO) 3 ( Region $$Table) 3 ( ZISection $$Table) } RAM_ EXEC 0x100000 { 3 . o ( + RO , + RW , + ZI)
很多嵌入式系统开发工程师对 ARM 的老版本开发 工具 ADS 非常熟悉 ,而 RealView MD K 与 ADS 相比较 , 从外观 、仿真流程以及内部二进制编译 、链接工具上都有 了不少改进 ,用法稍有不同 。本文的主旨是介绍通用的流 程以及一些注意事项 ,帮助 ADS 用户将老的 、遗留的 ADS 工程转化成在 RealView MD K 中进行开发调试的工程 。
仿真器
uVision CPU & Perip heral ARMulator Si mulatio n
相关主题