前身:ARM SDT ,后世:REALVIEW MDK、RVDS等。详见本人的博客:安装rvds到windows7
目前ADS的版本为1.2。相对于SDT,ADS用Code Warrior IDE集成开发环境代替了SDT的APM,用AXD代替了ADW。现代集成开发环境的一些基本特性如源文件编辑器语法高亮、窗口驻留等在ADS中得以体现。ADS可以在Windows 2000/Me以及在Red Hat Linux上运行。
它由6部分组成:代码生成工具、集成开发环境、调试器、指令集模拟器、ARM开发包和ARM应用库。其中集成开发环境为Code Warrior IDE;调试器包含3个,分别是扩展调试器AXD、向下兼容的ARM Debugger for Windows(ADW)/ARM Debugger for UNIX(ADU) 和ARM符号化调试器armsd,AXD是目前最常用的调试器,基于Windows风格,armsd作为命令行调试工具用于辅助调试,或者用在其他操作系统平台上。
1 命令行开发工具
这些工具完成将源代码编译,链接成可执行代码的功能。
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源代码进行预处理就停止;
-g<options>:指定是否在生成的目标文件中包含调试信息表;
-I<directory>:将directory所指的路径添加到#include的搜索路径列表中去; -J<directory>:用directory所指的路径代替默认的对#include的搜索路径;
-o<file>:指定编译器最终生成的输出文件名。
-O0:不优化;
-O1:这是控制代码优化的编译选项,大写字母O后面跟的数字不同,表示的优化级别就不同,-O1关闭了影响调试结果的优化功能;
-O2:该优化级别提供了最大的优化功能;
-S:对源程序进行预处理和编译,自动生成汇编文件而不是目标文件;
-U<symbol>:取消预处理宏名,相当于在源文件开头,使用语句#undef symbol;
-W<options>:关闭所有的或被选择的警告信息;
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 汇编语言写的源代码进行汇编。
armlink
armlink是ARM连接器。该命令既可以将编译得到的一个或多个目标文件和相关的一个或多个库文件进行链接,生成一个可执行文件,也可以将多个目标文件部分链接成一个目标文件,以供进一步的链接。ARM链接器生成的是ELF格式的可执行映像文件。
armsd
armsd是ARM 和Thumb的符号调试器。它能够进行源码级的程序调试。用户可以在用C或汇编语言写的代码中进行单步调试,设置断点,查看变量值和内存单元的内容。
2.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):它是指一个段,在该段中的可读/写的数据地址在运行期间可以改变。
加载时地址:是指映像文件位于存储器(在该映像文件没有运行时)中的地址。
运行时地址:是指映像文件在运行时的地址。
3.ARM运行时库