从ADS到RealViewMDK_上_

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

当用户没有该 ADS 遗留工程的全部源码 ,只拥有库 文件或者目标文件时 ,可以通过22apcs/ adsabi 编译选项强 制 MD K 的编译器产生复合 ADS ABI 要求的目标文件 , 以达到与遗留的 ADS 库文件 、目标文件兼容的目的 。
注意 : A RM 新工具将不会继续支持22apcs/ adsabi 选项 。建 议用户及时更新工具到最新版本 。
这是因为新工具的 ABI 要求在函数调用时 ,系统必 须保证堆栈指针 8 字节对齐 ,即每次进栈或者出栈的寄存 器数目必须为偶数 。这是为了能够更加高效地使用 STM 与 LDR 指令对“double”或者“long long”类型的数据进行 访问 。而老的 ARM 开发工具 ADS 并没有考虑到新的 ARM 内核架构 ,其 ABI 对于堆栈的操作仅仅要求 4 字节 对齐 。所以当用户将在 ADS 中编译 、链接成功的工程代 码移植到 MD K 上 ,或者将老的 、ADS 遗留的目标文件 、库 文件在新工具 MD K 中进行链接时 , MD K 的链接器就会 报出以上的错误 。
}
paper @mesnet. com. cn (投稿专用)
8 5 2007 年第 9 期 Microcontrollers & Embedded Systems
© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
为了给国内嵌入式 ARM 开发工程师提供高性价比 的开发工具 ,2007 年 5 月 22 日 ,ARM 公司和英蓓特公司 正式联合推出“RealView MD K 中国版”。该新产品是特 别为满足中国软件和系统开发厂商需求而推出的 ,起价低 于 2 500 元人民币 。专业人士认为 ,相比其他以欧美市场 定价的开发工具 ,此款 RealView MD K 易于纳入设计工 具的整体预算中 。中国版 RealView MD K 即日起可通过 ARM 授权培训中心暨 ARM 在中国的工具分销商 ———深 圳市英蓓特信息技术有限公司 (简称“英蓓特”) 获得 。此 外 ,有关中国版 RealView MD K 的特性和其他信息 ,ARM 公司 专 门设 立 了新 的 网站 http :/ / www. realview. com. cn ,开发工程师可以进一步了解 RealView MD K 及其相关 资讯 。
RVCT 采用了 POSIX 格式的编译 、链接选项 ,所有的 多字符选项前必须使用双中划线 。例如 : ADS 的编译选 项2cp u ,在 MD K 中需要改写成22cpu ,否则用户在 MD K 中 直接使用 ADS 的 makefile 时 ,工具会产生一个如下警告 :
Warning : L3910W : Old syntax , please use ’22cpu’
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 ’ ~
②在每个汇编文件的开头 , 添加“PRESERV E8”指
令 ,见例 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 编译选项
adv @mesnet. com. cn (广告专用)
个不同版本编译器的很多编译 、链接选项也有所不同 。有 关编译 、链接选项的变化 ,用户可以参考 ARM 工具文档 “RVCT Compiler and Libraries Guide ”中 的 Table E22 Mapping of compiler options 。
注 :“默认的编译选项”是指在没有其他编译选项时编译 器的缺省选项 。
2. 2 PO SIX 格式
MD K 集成了 RVDS 的编译工具 RVCT , 与 ADS 相 比 ,除去编译 、链接工具的可执行二进制文件不同之外 ,两
8 4
2007 年第 9 期
© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
很多嵌入式系统开发工程师对 ARM 的老版本开发 工具 ADS 非常熟悉 ,而 RealView MD K 与 ADS 相比较 , 从外观 、仿真流程以及内部二进制编译 、链接工具上都有 了不少改进 ,用法稍有不同 。本文的主旨是介绍通用的流 程以及一些注意事项 ,帮助 ADS 用户将老的 、遗留的 ADS 工程转化成在 RealView MD K 中进行开发调试的工程 。
仿真器
uVision CPU & Perip heral ARMulator Si mulatio n
硬件调试单元 uLink
Multi2ICE
2. 1 编译工具例化形式
在 ADS 中 ,当用户要将高级语言代码编译成目标文 件时 ,需要根据目标机器码的不同 (16 位的 Thumb 代码 或者 32 位的 ARM 代码) ,以及高级语言的不同 ( C 代码 或者 C + + 代码) 选择不同的编译器 可执行文 件 ; RVC T3. 0 编译器则将它们全部统一为 armcc ,仅仅通 过不同的编译选项进行区分 。表 2 较为详细地列出了 其中的差别 。
2 工具结构的改进
作为 ARM 的新一代微控制器开发工具 , RealView MD K 不 但 包 含 ARM 的 最 新 版 本 编 译 、链 接 工 具 ( 即 RVDS3. 0 的编译 、链接工具) ,而且根据微控制器调试开
发的特点采用了与 ADS、RVDS 完全不同的调试 、仿真环 境 uVision debugger 与 simulator 。因此 ,MD K 与 ADS 在 工具架构组成上有一些不同 ,这些区别包括 :不同的工程 管理器 ,不同版本的 ARM 编译器 (compiler) ,不同的调试 器( debugger) ,不同的仿真器 ( simulator) ,以及不同的硬 件调试单元 ,详见表 1 。
2. 4 分散加载注意事项
MD K 同样支持 ADS 的分散加载文件 ,但是当分散加 载文件中涉及到必须被放置 ROO T Region 中的 C 库函数 时 ,有时用户需要做少量修改 。
ROO T Region 的 load address 与 execution address 相 同 ,所以这部分代码在系统初始化时无需进行搬移操作 , 很多库函数 (如__scatter 3 . o 或者__ dc 3 . o) 必须被放置 在 Root Region 中 。
例 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)
当工程中包含汇编代码时 ,用户可能还需要做少量的 代码修改 。这些修改包括 :
①检查汇编源码中的指令 ,确保堆栈操作指令是 8
字节对齐的 。
例 1 中 ,ADS 的遗留代码一次性将 5 个寄存器压栈 ,
由于 ARM 的指令寄存器宽度为 32 位 (即 4 字节) ,显然 5
个寄存器入栈之后 ,堆栈指针不能够满足 64 位 、8 字节对
对于以上情况 ,用户可以通过简单修改代码并重新编 译 、链接 ,或者使用特殊的编译选项来解决 。
2. 3. 1 重新编译所有代码
当用户拥有该 ADS 遗留工程的所有源代码时 ,使用 MD K 重新编译 、链接全部代码是最好的解决方法 。MD K 中的新版本编译工具会重新生成满足堆栈 8 字节对齐要 求的目标文件 ,避免由于堆栈不对齐引起的链接错误 。
表 1 工具结构对比
工具元件组成
RealView MD K
ADS
工程管理 uVwk.baidu.comsion IDE
CodeWarrior IDE
编译器
ARM C/ C+ + Compiler RVCT ARM C co mpiler for ADS
调试器
uVision Debugger
ARM Extention Degugger ( AXD)
表 2 MDK与 ADS 编译器的例化形式对比
ADS1. 2 a r mcc Tcc a r mcpp Tcpp
RealView MD K3. 0 a r mcc armcc 2t humb armcc 22cpp armcc 22t humb 22cpp
默认的编译选项 22c90 2arm 22c90 22a r m
齐 。为了解决这种问题 ,可以将另外一个并不需要压栈的
寄存器( R12) 同时压栈 ,这样当 6 个 32 位寄存器进栈之
后 ,堆栈就能满足 64 位对齐了 。
例1
S TMFD sp ! , {r02r3 , lr}
;将 R0 ,R1 ,R2 ,R3 ,L R
; (奇数) 寄存器入栈

S TMFD sp ! , {r02r3 , r12 , lr} ; 将偶数个寄存器入栈
}
; MD K 中的分散加载文件 1
ROM_LOAD 0x0 { ROM_ EXEC 0x0 {
vectors. o (Vect , + First) 3 ( InRoot $$Sections)
} RAM_ EXEC 0x100000 {
}
3 . o ( + RO , + RW , + ZI)
从 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 微控制器开发工具 。
}
; MD K 中的分散加载文件 2
ROM_LOAD 0x0 { ROM_ EXEC 0x0 {
vectors. o (Vect , + First) _ _main. o ( 3 ) 3 ( Region $$Table) _ _scatter 3 . o ( 3 ) _ _dc 3 . o ( 3 ) } 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
相关文档
最新文档