|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
ARM 集成开发工具介绍
; d: D4 G6 i6 p) n: D; b( k( ~. d0 @
ARM ADS 全称为 ARM Developer Suite 。是 ARM 公司推出的新一代 ARM 集成开发工具。现在 ADS 的最新版本是 1.2 ,它取代了早期的 ADS1.1 和 ADS1.0 。它除了可以安装在 Windows NT4 ,Windows 2000 , Windows 98 和 Windows 95 操作系统下,还支持 Windows XP 和 Windows Me 操作系统。
' M& ?/ \8 W6 m. Q9 h# g6 g/ |% n: R/ Z
ADS 由命令行开发工具, ARM 时实库, GUI 开发环境 (Code Warrior 和 AXD) ,实用程序和支持软件组成。 有了这些部件,用户就可以为 ARM 系列的 RISC 处理器编写和调试自己的开发应用程序了。$ V9 k4 H- V( B( U* {, r3 r
8 J' I; x) z6 A% x. J/ m
) }% E% D4 I9 H下面就详细介绍一下 ADS 的各个组成部分。' w! }! i: E( Z/ i( u$ b7 p; ]6 e
/ ~. K* U ?* G4 `7 A8 k0 _) Ml 命令行开发工具( S8 i, [3 M a! S. V% j! p
/ s2 s5 T9 ]' x, M" _ ] @这些工具完成将源代码编译,链接成可执行代码的功能。
i+ o" M/ R# ]6 [7 X4 Q
3 }' s0 V D3 Q6 P5 o5 @ADS 提供下面的命令行开发工具:
- A1 U# S; Y# ?: Y2 xarmcc
1 f! b0 m6 _" e! @' a/ U6 Tarmcc 是 ARM C 编译器。这个编译器通过了 Plum Hall C Validation Suite 为 ANSI C 的一致性测试。 armcc 用于将用 ANSI C 编写的程序编译成 32 位 ARM 指令代码。 . \3 j/ b' _8 E5 ]' `
因为 armcc 是我们最常用的编译器,所以对此作一个详细的介绍。
8 ~9 C% T4 t% u) @在命令控制台环境下,输入命令:
2 u1 S, k7 G& r( parmcc – help
3 `6 y0 f/ o% z8 A0 S9 o: F可以查看 armcc 的语法格式以及最常用的一些操作选项 # U- \; h1 I3 E: N8 @
armcc 最基本的用法为: armcc [options] file1 file2 ... filen
; b; [. d* [3 u0 o这里的 option 是编译器所需要的选项, fiel1,file2…filen 是相关的文件名。
/ Q. d/ h" g9 e, q: v, O7 V0 m' l这里简单介绍一些最常用的操作选项。
/ V; \1 r# W4 e! F# Z$ [-c :表示只进行编译不链接文件; 1 t/ H! X+ L, k& o T2 ?
-C : ( 注意:这是大写的 C) 禁止预编译器将注释行移走; 8 z% _" d7 D8 f1 }& i A
-D<symbol> :定义预处理宏,相当于在源程序开头使用了宏定义语句 #define symbol ,这里 symbol 默认为 1 ;
3 ~4 [4 l; E3 l/ M# R-E :仅仅是对 C 源代码进行预处理就停止; * B% Y5 A4 U w1 e. K$ ]
-g<options> :指定是否在生成的目标文件中包含调试信息表;
i0 r( u9 p! ^0 s-I<directory> :将 directory 所指的路径添加到 #include 的搜索路径列表中去; -J<directory> :用directory 所指的路径代替默认的对 #include 的搜索路径; 9 v# @( u9 }# q
-o<file> :指定编译器最终生成的输出文件名。
8 p5 E5 ]2 Y7 m4 Z0 Z; |; Y-O0 :不优化;
/ M8 z3 `+ O/ C' ~2 ^" V1 S-O1 :这是控制代码优化的编译选项,大写字母 O 后面跟的数字不同,表示的优化级别就不同, -O1 关闭了影响调试结果的优化功能; 0 m3 [7 S2 F# D" E. f
-O2 :该优化级别提供了最大的优化功能;
1 R% A8 a1 ?) U" Y& v9 @: P: a8 `-S :对源程序进行预处理和编译,自动生成汇编文件而不是目标文件;
& N- z+ Q% e/ B' E9 b$ {-U<symbol> :取消预处理宏名,相当于在源文件开头,使用语句 #undef symbol;
5 k3 |" J( o% k A( q' P4 c$ S$ `% m0 ]-W<options> :关闭所有的或被选择的警告信息; 9 R- S8 K- B% J9 R6 g4 Z# Z4 R: L
有关更详细的选项说明,读者可查看 ADS 软件的在线帮助文件。 . x6 I9 f& w( o% B/ B2 E4 h
armcpp : l$ b6 ?2 c+ ]% f! C1 ?$ L
armcpp 是 ARM C++ 编译器。它将 ISO C++ 或 EC++ 编译成 32 位 ARM 指令代码。
; t* `8 e$ g" J% Ntcc 5 `. }/ j {% i) U# Q; Z
tcc 是 Thumb C 编译器。该编译器通过了 Plum Hall C Validation Suite 为 ANSI 一致性的测试。 : E) c# D" s5 d, ]6 \0 q
tcc 将 ANSI C 源代码编译成 16 位的 Thumb 指令代码。
1 d0 k$ T/ u2 q8 b$ u* G, [1 Htcpp ) J# f# _* z) r. w: F8 i
tcpp 是 Thumb C++ 编译器。 它将 ISO C++ 和 EC++ 源码编译成 16 位 Thumb 指令代码。
. ]; Z6 R" q# e. v- Larmasm 6 s5 ~( R. k4 C, H8 Q
armasm 是 ARM 和 Thumb 的汇编器 . 它对用 ARM 汇编语言和 Thumb 汇编语言写的源代码进 行汇编。 ( N5 r3 l# M( ^$ V- b
armlink
: L" O J, a. p6 A: _/ w& marmlink 是 ARM 连接器。该命令既可以将编译得到的一个或多个目标文件和相关的一个或多个库文件进行链接,生成一个可执行文件,也可以将多个目标文件部分链接成一个目标文件,以供进一步的链接。 ARM 链接器生成的是 ELF 格式的可执行映像文件。 7 |; i4 y0 X" p8 t
armsd ! K4 T s5 j/ x$ v) ~4 O: s/ g
armsd 是 ARM 和 Thumb 的符号调试器。它能够进行源码级的程序调试。用户可以在用 C 或汇编语言写的代码中进行单步调试,设置断点,查看变量值和内存单元的内容。 2 ?/ w, |% ?7 X: ]) T, K' I# X
: `( J6 E) Y: S7 l. d0 A
GUI 开发环境 (Code Warrior 和 AXD) 1 _0 | o) l& c' y0 q5 `1 l
(1)CodeWarrior 集成开发环境 . i% J! W4 O/ K3 u8 x2 T# `, j6 v
CodeWarrior for ARM 是一套完整的集成开发工具,充分发挥了 ARM RISC 的优势 , 使产品开发人员能够很好的应用尖端的片上系统技术 . 该工具是专为基于 ARM RISC 的处理器而设计的 , 它可加速并简化嵌入式开发过程中的每一个环节,使得开发人员只需通过一个集成软件开发环境就能研制出 ARM 产品,在整个开发周期中 , 开发人员无需离开 CodeWarrior 开发环境 , 因此节省了在操做工具上花的时间 , 使得开发人员有更多的精力投入到代码编写上来, CodeWarrior 集成开发环境 (IDE) 为管理和开发项目提供了简单多样化的图形用户界面。用户可以使用 ADS 的 CodeWarrior IDE 为 ARM 和 Thumb 处理器开发用 C , C++ ,或 ARM 汇编语言的程序代码。通过提供下面的功能, CodeWarrior IDE 缩短了用户开发项目代码的周期。
1 A8 }: F, C# ^5 y2 s/ E9 E0 d4 C(1). 全面的项目管理功能; % W. Y# `* N$ R, L+ w& Z
(2). 子函数的代码导航功能,使得用户迅速找到程序中的子函数。
% p1 g6 V- }6 M# |' {可以在 CodeWarrior IDE 为 ARM 配置在 8.1.1 中介绍的各种命令工具,实现对工程代码的编译, 汇编和链接。 - m+ W5 ?6 [3 R& U( H
在 CodeWarrior IDE 中所涉及到的 target 有两种不同的语义。
+ l* _' J% q- I0 ]目标系统 (Target system) 6 @, T2 G6 z1 j, q3 t
是特指代码要运行的环境,是基于 ARM 的硬件。比如,要为 ARM 开发板上编写要运行在它上面的程序,这个开发板就是目标系统。 " T0 |5 y: n/ t% f* z0 b J- s" s
生成目标 (Build target)
, i0 _) N( X5 N4 Y是指用于生成特定的目标文件的选项设置 ( 包括汇编选项,编译选项,链接选项以及链接后的处理选项 ) 和所用的文件的集合。 % [- z. n9 h/ o% t1 Z2 x
CodeWarrior IDE 能够让用户将源代码文件,库文件还有其他相关的文件以及配置设置等放在一个工程中。每个工程可以创建和管理生成目标设置的多个配置。例如,要编译一个包含调试信息的生成目标和一个基于 ARM7TDMI 的硬件优化生成目标,生成目标可以在同一个工程中共享文件,同时使用各自的设置。 * b7 m' h% @# X/ {& b# r
CodeWarrior IDE 为用户提供下面的功能: + r6 ^! I) A3 c
源代码编辑器,它集成在 CodeWarrior IDE 的浏览器中,能够根据语法格式,使用不同的颜色显示代码;
! X% ?5 ]9 G( C/ r9 c) x源代码浏览器,它保存了在源码中定义的所有符号,能够使用户在源码中快速方便的跳转;查找和替换功能,用户可以在多个文件中,利用字符串通配符,进行字符串的搜索和替换;
9 I# j3 a! \5 r- p9 @& S文件比较功能,可以使用户比较路径中的不同文本文件的内容。 7 W: w" k( [8 w
ADS 的 CodeWarrior IDE 是基于 Metrowerks CodeWarrior IDE 4.2 版本的。它经过适当的裁剪以支持 ADS 工具链。 ; l3 \* _7 |0 \$ I. e/ p) N; j
针对 ARM 的配置面板为用户提供了在 CodeWarrior IDE 集成环境下配置各种 ARM 开发工具的能力,这样用户可以不用在命令控制台下就能够使用在 8.1.1 和将在 8.1.4 中介绍的各种命令。
. [% u4 Z* V% s6 o& d以 ARM 为目标平台的工程创建向导,可以使用户以此为基础,快速创建 ARM 和 Thumb 工程。
2 H8 ~% K0 F- P& ]7 X尽管大多数的 ARM 工具链已经集成在 CodeWarrior IDE ,但是仍有许多功能在该集成环境中没有实现,这些功能大多数是和调试相关的,因为 ARM 的调试器没有集成到 CodeWarrior IDE 中。
# A' d( x7 a* j' Q7 P7 G9 X由于 ARM 调试器 (AXD) 没有集成在 CodeWarrior IDE 中,这就意味着,用户不能在 CodeWarrior IDE 中进行断点调试和查看变量。
0 S: [; ]# k/ W0 @9 ^1 y对于熟悉 CodeWarrior IDE 的用户会发现,有许多的功能已经从 CodeWarrior IDE For ARM 中移走,比如快速应用程序开发模板等。 1 n" I6 _5 T0 l% a, O& O% l
在 CodeWarrior IDE For ARM 中有很多的菜单或子菜单是不能使用的。下面介绍一下这些不能使用的选项。 6 k4 O1 ]: V% D+ |# Z+ O% u
(1). View 菜单下不能使用的菜单选项有: 4 m7 }7 ]; x8 K3 z5 ?' q
Processes , Expressions , Global Variable , Breakpoints , Registers 。 - J4 C. U6 W0 t3 z
(2). Project 菜单不能使用的菜单选项: $ p' o0 F5 U4 s& X
Precompile 子菜单。因为 ARM 编译器不支持预编译的头文件。 + x# p) p/ ]6 y- ?
(3). Debug 菜单
/ I2 h3 F* i# g该菜单中没有一个子菜单是可以使用的。 $ v( [/ L. l" R
(4). Browser 菜单中不能使用的菜单选项:
( }8 @; t" }) P! x2 D) T" [9 {New Property , New Method 和 New Event Set 。
. U) W1 V2 a2 D5 k! g! j/ Y' [(5). Help menu 中不能用于 ADS 的菜单选项有: t8 b/ d$ c( S5 B8 e
CodeWarrior Help , Index , Search 和 Online Manuals 。
1 k8 G# b# T k有关 CodeWarrior IDE 中一些常用菜单的使用,将在后面的举例中具体说明的,在此,不在赘述。
, f& \0 a0 C6 d" s. K, z(2)ADS 调试器 8 Z0 l: D9 O, a7 x( Q
调试器本身是一个软件,用户通过这个软件使用 debug agent 可以对包含有调试信息的,正在运行的可执行代码进行比如变量的查看,断点的控制等调试操作。 , w! P( [3 ~0 a5 O/ x7 }' q
ADS 中包含有 3 个调试器:
! y% F6 r0 \& n$ qAXD(ARM eXtended Debugger) : ARM 扩展调试器;
* ?/ ~3 m* t6 t5 p" `6 Iarmsd(ARM Symbolic Debugger) : ARM 符号调试器; ; H7 n0 W3 A8 c. v9 r [& X
与老版本兼容的 Windows 或 Unix 下的 ARM 调试工具, ADW/ADU(Application Debugger & O" `- h5 I! s$ E% q, j! i; O
Windows/Unix) 。 ) p& H/ l F. j" H) F; ?) h
下面对在调试映像文件中所涉及到的一些术语做一个简单的介绍。 % ?/ E! h4 I) d3 ~
Debug target
+ y" n g6 }9 K# {5 `( y2 c在软件开发的最初阶段,可能还没有具体的硬件设备。如果要测试所开发的软件是否达到了预 . p( F- w2 t0 ^
期的效果,这可以由软件仿真来完成。即使调试器和要测试的软件运行在同一台 PC 上,也可以把目标当作一个独立的硬件来看待。 4 \, z) j) D' ?. u# d+ \
当然,也可以搭建一个 PCB 板,这个板上可以包含一个或多个处理器,在这个板上可以运行和调试应用软件。
9 O$ R6 C( Z) B$ K7 Y# c; }" ?' R只有当通过硬件或者是软件仿真所得到的结果达到了预期的效果,才算是完成了应用程序的编写工作。
, z4 M/ f9 W% T$ n0 @; R调试器能够发送以下指令:
$ _# c+ L6 E1 y' N1). 装载映像文件到目标内存;
: W# ]1 `( i3 B& J" n2). 启动或停止程序的执行;
" @3 N7 _. S& Z X/ W% S9 N3). 显示内存,寄存器或变量的值; 3 [2 W" @3 h$ J0 s3 R
4). 允许用户改变存储的变量值。 ! w1 ]! J: e4 E8 E
Debug agent
5 r, g1 d8 y7 G/ [) NDebug agent 执行调试器发出的命令动作,比如:设置断点,从存储器中读数据,把数据写到存储器等。 " l2 r! s* J5 ]
Debug agent 既不是被调试的程序,也不是调试器。在 ARM 体系中,它有这几种方式: b+ Q+ ~3 i+ N- {
Multi-ICE(Multi-processor in-circuit emulator) , ARMulator 和 Angel 。其中 Multi-ICE 是一个独立的产品,是 ARM 公司自己的 JTAG 在线仿真器,不是由 ADS 提供的。
! ]0 G0 z* u- g/ a- JAXD 可以在 Windows 和 UNIX 下,进行程序的调试。它为用 C , C++ ,和汇编语言编写的源代码提供了一个全面的 Windows 和 UNIX 环境。 ; i( D: L7 f* t8 w
实用程序
6 K9 l7 @2 s9 J0 a6 f- U/ qADS 提供以下的实用工具来配合前面介绍的命令行开发工具的使用fromELF 。这是 ARM 映像文件转换工具。该命令将 ELF 格式的文件作为输入文件,将该格式转换为各种输出格式的文件,包括 plain binary(BIN 格式映像文件 ), Motorola 32-bit S-record format(Motorola 32位 S 格式映像文件 ), Intel Hex 32 format(Intel 32 位格式映像文件 ) ,和 Verilog-like hex format(Verilog 16 进制文件 ) 。 FromELF 命令也能够为输入映像文件产生文本信息,例如代码和数据长度。 ( L5 r7 C) ]7 x5 k7 {3 I
armar + G- n: v9 o; d2 ]3 U# X: u2 h- u
ARM 库函数生成器将一系列 ELF 格式的目标文件以库函数的形式集合在一起,用户可以把一个库传递给一个链接器以代替几个 ELF 文件。
" Y& O# w/ B6 {Flash downloader
! W, o8 Q5 c6 I5 a s; u5 Y用于把二进制映像文件下载到 ARM 开发板上的 Flash 存储器的工具
$ @: H; x! T. T支持的软件 * n# v0 h. _7 I1 @
ADS 为用户提供下面的软件,使用户可以在软件仿真的环境下或者在基于 ARM 的硬件环境调试用户应用程序。 6 m6 ?% W( P; s+ @7 I6 x
ARMulator
5 I1 k! Q e6 R) Q! z# g; Q) K这是一个 ARM 指令集仿真器,集成在 ARM 的调试器 AXD 中,它提供对 ARM 处理器的指令集的仿真,为 ARM 和 Thumb 提供精确的模拟。用户可以在硬件尚未做好的情况下,开发程序代码。5 y- ^; v d( R l7 d8 _7 Y
|
|