www.plcworld.cn
ARM
应用系统开发详解──基于
S3C4510B
的系统设计
www.91HMI.com
第8章
ARM ADS
集成开发环境的½用
在这一章里,将介绍
ARM
开发½件
ADS(ARM Developer Suite)。通过学习如½在
CodeWarrior IDE
集成开发环境下编写,编译一个工程的例子,½读者½够掌握在
ADS
½件
平台下开发用户应用程序。本章还描述了如½½用
AXD
调试工程,½读者对于调试工程有
个初步的理解,为进一步的½用和掌握调试工具起到抛砖引玉的½用。
本章主要内容有:
-
ADS
½件组成介绍
- ½用
ADS
创建工程
- 用
AXD
进行代码调试
8.1
ADS
集成开发环境组成介绍
www.91HMI.com
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
操½系统。
ADS
由½令行开发工具,ARM 时实库,GUI 开发环境(Code
Warrior
和
AXD),实用程
序和支持½件组成。 有了这些部件,
www.PLCworld.cn
ARM
系列的
RISC
处理器编写和调试自
用户就可以为
己的开发应用程序了。
下面就详细介绍一下
ADS
的各个组成部分。
www.91HMI.com
8.1.1
½令行开发工具
ld
.c
n
这些工具完成将源代码编译,链接成可执行代码的功½。
ADS
提供下面的½令行开发工具:
armcc
armcc
是
ARM C
编译器。这个编译器通过了
Plum Hall C Validation Suite
为
ANSI C
的
一致性测试。armcc 用于将用
ANSI C
编写的程序编译成
32
½
ARM
指令代码。
因为
armcc
是我们最常用的编译器,所以对此½一个详细的介绍。
在½令控制台环境下,输入½令:
armcc –help
可以查看
armcc
的语法格式以及最常用的一些操½选项
armcc
最基本的用法为:
armcc [options] file1 file2 ... filen
这里的
option
是编译器所需要的选项,fiel1,file2…filen 是相关的文件名。
这里简单介绍一些最常用的操½选项。
-c:表示只进行编译不链接文件;
-C:(注意:这是大写的 C)禁止预编译器将注释行移走;
-D<symbol>:定义预处理宏,相½于在源程序开头½用了宏定义语句#define symbol
,
这里
symbol
默认为
1;
-E:仅仅是对 C
源代码进行预处理就停止;
w
w
w
.P
LC
w
or
www.plcworld.cn
ARM
应用系统开发详解──基于
S3C4510B
的系统设计
www.91HMI.com
-g<options>:指定是否在生成的目标文件中包含调试信息表;
-I<directory>
: 将
directory
所 指 的 路 径 添 加 到
#include
的 搜 索 路 径 列 表 中 去 ;
-J<directory>:用 directory
所指的路径代替默认的对#include 的搜索路径;
-o<file>:指定编译器最终生成的输出文件名。
-O0:不优化;
-O1:这是控制代码优化的编译选项,大写字母 O
后面跟的数字不同,表示的优化级别
就不同,-O1 关闭了½响调试结果的优化功½;
-O2:该优化级别提供了最大的优化功½;
-S:对源程序进行预处理和编译,自动生成汇编文件而不是目标文件;
-U<symbol>:取消预处理宏名,相½于在源文件开头,½用语句#undef symbol;
-W<options>:关闭所有的或被选择的警告信息;
有关更详细的选项说明,读者可查看
ADS
½件的在线帮助文件。
armcpp
armcpp
是
ARM C++编译器。它将 ISO C++
或
EC++
编译成
32
½
ARM
指令代码。
tcc
tcc
是
Thumb C
编译器。该编译器通过了
Plum Hall C Validation Suite
为
ANSI
一致性
的测试。tcc 将
ANSI C
源代码编译成
16
½的
Thumb
指令代码。
tcpp
tcpp
是
Thumb C++
编译器。 它将
ISO C++
和
EC++
源码编译成
16
½
Thumb
指令代
码。
armasm
armasm
是
ARM
和
Thumb
的汇编器. 它对用
ARM
汇编语言和
Thumb
汇编语言写的源
www.PLCworld.cn
代码进行汇编。
armlink
armlink
是
ARM
连接器。该½令既可以将编译得到的一个或多个目标文件和相关的一
个或多个库文件进行链接,
生成一个可执行文件,
也可以将多个目标文件部分链接成一个目
标文件,以供进一步的链接。ARM 链接器生成的是
ELF
格式的可执行映像文件。
www.91HMI.com
www.91HMI.com
ld
.c
n
.P
LC
w
or
w
armsd
armsd
是
ARM
和
Thumb
的符号调试器。它½够进行源码级的程序调试。用户可以在
用
C
或汇编语言写的代码中进行单步调试,设½断点,查看变量值和内存单元的内容。
w
w
8.1.1.1 armcc
用法详解
下面为读者介绍上述的
4
种
ARM C
和
C++编译器的½令通用语法。
compiler
[PCS-options]
[source-language]
[search-paths]
[preprocessor-options]
[output-format] [target-options] [debug-options] [code-generation-options] [warning-options]
[additional-checks] [error-options] [source]
用户可以通过½令行操½选项控制编译器的执行。所有的选项½是以符号”-”开始,有
些选项后面还跟有参数。在大多数情况下,ARM
C
和
C++编译器允许在选项和参数之间存
在空格。
½令行中各个选项出现顺序可以任意。
这里的
compiler
是指
armcc,tcc, armcpp
和
tcpp
中的一个;
PCS-options:指定了要½用的过程调用标准;
source-language:指定了编译器可以接受的编写源程序的语言种类。对于 C
编译器默认
的语言是
ANSI C,对于 C++编译器默认是 ISO
标准
C++;
search-paths:该选项指定了对包含的文件(包括源文件和头文件)的搜索路径;
www.plcworld.cn
ARM
应用系统开发详解──基于
S3C4510B
的系统设计
www.91HMI.com
preprocessor-options:该选项指定了预处理器的行为,其中包括预处理器的输出和宏定
义等特性;
output-format:该选项指定了编译器的输出格式,可以½用该项生成汇编语言输出列表
文件和目标文件;
target-options:该选项指定目标处理器或 ARM
½系结构;
debug-options:该选项指定调试信息表是否生成,和该调试信息表生成时的格式;
code-generation-options:该选项指定了例如优化,字节顺序和由编译器产生的数据对½
格式等选项;
warning-options:该选项决定警告信息是否产生;
additional-checks:该选项指定了几个½用于源码的附加检查,例如检查数据流异常,
检查没有½用的声明等;
error-options:该选项可以关闭指定的可恢复的错误,或者将一些指定的错误降级为警
告;
source:该选项提供了包含有 C
或
C++源代码的一个或多个文件名,默认的,编译器在
½前路径寻找源文件和创建输出文件。如果源文件是用汇编语言编写的(也就是说该文件的
文件名是以.s ½为扩展名),汇编器将被调用来处理这些源文件。
如果操½系统对½令行的长度有限制,
可以½用下面的操½,
从文件中读取另外的½令
行选项:
-via filename
该½令打开文件名为
filename
的文件,并从中读取½令行选项。用户可以对-via 进行嵌
套调用,亦即,在文件
filename
中又通过-via
finlename2
包含了另外一个文件。
在下面的例子中,从
input.txt
文件中读取指定的选项,½为
armcpp
的操½选项:
www.PLCworld.cn
www.91HMI.com
armcpp -via input.txt source.c
以上是对编译器选项的一个简单概述。它们(包括后面还要介绍的其他一些½令工具)既
可以在½令控制台环境下½用,同时由于它们被嵌入到了
ADS
的图½界面中,所以也可以
在图½界面下½用。
www.91HMI.com
8.1.1.2 armlink
用法详解
ld
.c
n
w
.P
LC
w
or
在介绍
armlink
的½用方法之前,先介绍要涉及到的一些术语。
映像文件(image):是指一个可执行文件,在执行的时候被加½½到处理器中。一个映像
文件有多个线程。它是
ELF(Executable and linking format)格式的。
段(Section):描述映像文件的代码或数据块。
RO:是 Read-only
的简写½式。
RW:是 Read-write.的简写½式。
ZI:是 Zero-initialized
的简写½式。
输入段(input
section):它包含着代码,初始化数据或描述了在应用程序运行之前必须要
初始化为
0
的一段内存。
输出段(output
section):它包含了一系列具有相同的 RO,RW
或
ZI
属性的输入段。
域(Regions):在一个映像文件中,一个域包含了
1
至
3
个输出段。多个域组织在一起,
就构成了最终的映像文件。
Read Only Position Independent(ROPI):
它是指一个段,
在这个段中代码和只读数据的地
址在运行时候可以改变。
Read Write Position Independent(RWPI):它是指一个段,在该段中的可读/写的数据地址
在运行期间可以改变。
加½½时地址:是指映像文件½于存储器(在该映像文件没有运行时)中的地址。
w
w
www.plcworld.cn
ARM
应用系统开发详解──基于
S3C4510B
的系统设计
www.91HMI.com
运行时地址:是指映像文件在运行时的地址。
下面介绍一下
armlink
½令的语法
完整的连接器½令语法如下:
armlink [-help] [-vsn] [-partial] [-output file] [-elf] [-reloc][-ro-base address] [-ropi]
[-rw-base address] [-rwpi] [-split]
[-scatter file][-debug|-nodebug][-remove?RO/RW/ZI/DBG]|-noremove] [-entry location ]
[-keep section-id] [-first section-id] [-last section-id] [-libpath pathlist] [-scanlib|-noscanlib]
[-locals|-nolocals] [-callgraph] [-info topics] [-map] [-symbols] [-symdefs file] [-edit file]
[-xref] [-xreffrom object(section)] [-xrefto object(section)] [-errors file] [-list file] [-verbose]
[-unmangled |-mangled] [-match crossmangled][-via file] [-strict]
[-unresolved symbol][-MI|-LI|-BI] [input-file-list]
上面各选项的含义分别为:
-help
这个选项会列出在½令行中常用的一些选项操½。
-vsn
这个选项显示出所用的
armlink
的版本信息。
-partial
用这个选项创建的是部分链接的目标文件而不是可执行映像文件。
-output file
这个选项指定了输出文件名,
该文件可½是部分链接的目标文件,
也可½是可执行映像
文件。如果输出文件名没有特别指定的话,armlink 将½用下面的默认:
如果输出是一个可执行映像文件,则生成的输出文件名为__image.axf;
www.PLCworld.cn
如果输出是一个部分链接的目标文件,在生成的文件名为__object.o;
如果没有指定输出文件的路径信息,
则输出文件就在½前目½下生成。
如果指定了路径
信息,则所指定的路径成为输出文件的½前路径。
-elf
这个选项生成
ELF
格式的映像文件,这也是
armlink
所支持的唯一的一种输出格式,这
是默认选项。
-reloc
这个选项生成可重定址的映像。
一个可重定址的映像具有动态的段,
这个段中包含可重定址信息,
利用这些信息可以在
链接后,进行映像文件的重新定址;
-reloc,-rw-base
一起½用,½是如果没有-split 选项,链接时会产生错误。
-ro-base address
这个选项将包含有
RO(Read-Only
属性)输出段的加½½地址和运行地址设½为
address,
该地址必须是字对½的,如果没有指定这个选项,则默认的
RO
基地址值为
0x8000。
-ropi
这个选项½得包含有
RO
输出段的加½½域和运行域是½½无关的。如果该选项没有½
用,则相应的域被标记为绝对的。通常每一个只读属性的输入段必须是只读½½无关的。如
果½用了这个选项,armlink 将会进行以下操½:
检查各段之间的重定址是否有效;
确保任½由
armlink
自身生成的代码是只读½½无关的。
这里希望读者注意的是,ARM 工具直到
armlink
完成了对输入段的处理后,才½够决
定最终的生成映像是否为只读½½无关的。这就意味着 ,即½为编译器和汇编器指定了
www.91HMI.com
www.91HMI.com
w
w
w
.P
LC
w
or
ld
.c
n
www.plcworld.cn
ARM
应用系统开发详解──基于
S3C4510B
的系统设计
www.91HMI.com
ROPI
选项,armlink 也可½会产生
ROPI
错误信息。
-rw-base address
这个选项设½包含
RW(Read/Write
属性)输出段的域的运行时地址,该地址必须是字对
½的。
如果这个选项和-split 选项一起½用,将设½包含
RW
输出段的域的加½½和运行时地址
½设½在
address
处。
-rwpi
这个选项½得包含有
RW
和
ZI(Zero Initialization,
初始化为
0)属性的输出段的加½½和运
行时域为½½无关的。如果该选项没有½用,相应域标记为绝对的。这个选项要求-rw-base
选项后有值,如果-rw-base 没有指定的话,默认其值为
0,即相½于-rw-base 0。通常每一个
可写的输入段必须是可读/ 可写的½½无关的。
如果½用了该选项,armlink 会进行以下的操½:
检查可读/可写属性的运行域的输入段是否设½了½½无关属性;
检查在各段之间的重定址是否有效;
生成基于静态寄存器
sb
的条目,这些在
RO
和
RW
域被拷贝和初始化的时候会用到。
编译器并不会强制可写的数据一定要为½½无关的,
这就是说,
即½在为编译器和汇编
器指定了
RWPI
选项,armlink 也可½生成数据不是
RWPI
的信息。
-split
这个选项将包含
RO
和
RW
属性的输出段的加½½域,分割成
2
个加½½域。一个是包含
RO
输出段的加½½域,默认的加½½地址为
0x8000,½是可以用-ro-base
选项设½其他的地址
值,另一个加½½域包含
RO
属性的输出段,由-rw-base 选项指定加½½地址,如果没有½用
-rw-base
选项的话,默认½用的是-rw-base
0。
www.PLCworld.cn
www.91HMI.com
-scatter file
这个选项½用在
file
中包含的分组和定½信息来创建映像内存映射。
注意,如果½用了该选项的话,必须要重新实现堆栈初始化½数
__user_initial_stackheap()。
-debug
这个选项½输出文件包含调试信息,调试信息包括,调试输入段,符号和字符串表。这
是默认的选项。
-nodebug
这个选项½得在输出文件中不包含调试信息。
生成的映像文件短小,
½是不½进行源码
级的调试。armlink 对在输入的目标文件和库½数中发现的任½调试输入段½不予处理,½
加½½映像文件到调试器中的时候,
也不包含符号和字符串信息表。
这个选项仅仅是对装½½到
调试器的映像文件的大小有½响,
½是对要下½½到目标板上的二进制代码的大小没有任½½
响。
如果用
armlink
进行部分链接生成目标文件而不是映像文件,则½然在生成的目标文件
中不含有调试输入段,½是会包含符号和字符串信息表。
这里特别请读者注意的是:
如果要在链接完成后½用
fromELF
工具的话,不可½用-nodebug 选项,这是因为如果
生成的映像文件中不包含调试信息的话,则有下面的½响:
fromELF
不½将映像文件½换成其他格式的文件;
fromELF
不½生成有意义的反汇编列表。
-remove (RO/RW/ZI/DBG)
½用这个选项会将在输入段未½用的段从映像文件中删除。
如果输入段中含有映像文件
www.91HMI.com
w
w
w
.P
LC
w
or
ld
.c
n
评论