火龙果·整理 1.3.1ADS软件组成 ADS由命令行开发工具,GUI(Graphics User Interface,图形用户界面)开发环境(Code Warrior和AXD),实用程序和支持软件组成。有了这些部件,用户就可以为ARM系列的 RSC处理器编写和调试自己的开发应用程序了。下面将分别介绍这四个组成部分。 1.3.1.1命令行开发工具 命令行开发工具在实际应用中相对比较广泛,用其最大的好处就是可以将许多编译命令 写在一个脚本文件中,然后只执行该脚本文件就可以让工具自动完成所有编译的工作。命令 行中常用的命令如下: >armcc armcc是ARMC编译器.这个编译器通过了Plum Hall C Validation Suite为ANSI C 的一致性测试。armcc用于将用ANSI C编写的程序编译成32位ARM指令代码。 在命令控制台环境下,输入以下命令: armcc -help 将可以查看armcc的语法格式以及最常用的一些操作选项 armcc最基本的用法为: armcc [options]filel file2...filen 这里的option是编译器所需要的选项,fiell.,fle2.flen是相关的文件名。 以下简单介绍一些最常用的操作选项: -C:表示只进行编译不链接文件: -C:(注意:这是大写的C)禁止预编译器将注释行移走: -D<symbol>::定义预处理宏,相当于在源程序开头使用了宏定义语句 E:仅仅是对C源代码进行预处理就停止: -g<options>:指定是否在生成的目标文件中包含调试信息表: -<directory>:将directory所指的路径添加到#include的搜索路径列表中去: -J<directory>:用directory所指的路径代替默认的对#include的搜索路径: -o<fl>:指定编译器最终生成的输出文件名。 -00:不优化: -O1:这是控制代码优化的编译选项,大写字母O后面跟的数字不同,表示的优化级别 就不同,-O1关闭了影响调试结果的优化功能: -O2:该优化级别提供了最大的优化功能: -S:对源程序进行预处理和编译,自动生成汇编文件而不是目标文件: -U<symbol>:取消预处理宏名,相当于在源文件开头,使用语句undef symbol;: -W<options>:关闭所有的或被选择的警告信息: 有关更详细的选项说明,读者可查看ADS软件的在线帮助文件。 >armcpp armcpp是ARMC+编译器。它将ISOC+或EC+编译成32位ARM指令代码。该 编译器的命令选项和amcc的选项基本一样,这里就不再重复。 >tcc tcc是Thumb C编译器。该编译器通过了Plum Hall C Validation Suite为ANSI一致性 的测试。tcc将ANSI C源代码编译成l6位的Thumb指令代码。同时它的编译选项和用法
1.3.1 ADS 软件组成 ADS 由命令行开发工具,GUI(Graphics User Interface,图形用户界面)开发环境(Code Warrior 和 AXD),实用程序和支持软件组成。有了这些部件,用户就可以为 ARM 系列的 RISC 处理器编写和调试自己的开发应用程序了。下面将分别介绍这四个组成部分。 1.3.1.1 命令行开发工具 命令行开发工具在实际应用中相对比较广泛,用其最大的好处就是可以将许多编译命令 写在一个脚本文件中,然后只执行该脚本文件就可以让工具自动完成所有编译的工作。命令 行中常用的命令如下: Ø armcc armcc 是 ARM C 编译器。这个编译器通过了 Plum Hall C Validation Suite 为 ANSI C 的一致性测试。armcc 用于将用 ANSI C 编写的程序编译成 32 位 ARM 指令代码。 在命令控制台环境下,输入以下命令: > armcc –help 将可以查看 armcc 的语法格式以及最常用的一些操作选项 armcc 最基本的用法为: > armcc [options] file1 file2 ... filen 这里的 option 是编译器所需要的选项,fiel1,file2…filen 是相关的文件名。 以下简单介绍一些最常用的操作选项: -c:表示只进行编译不链接文件; -C:(注意:这是大写的 C)禁止预编译器将注释行移走; -D<symbol>:定义预处理宏,相当于在源程序开头使用了宏定义语句 -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>:关闭所有的或被选择的警告信息; 有关更详细的选项说明,读者可查看 ADS 软件的在线帮助文件。 Ø armcpp armcpp 是 ARM C++编译器。它将 ISO C++ 或 EC++ 编译成 32 位 ARM 指令代码。该 编译器的命令选项和 armcc 的选项基本一样,这里就不再重复。 Ø tcc tcc 是 Thumb C 编译器。该编译器通过了 Plum Hall C Validation Suite 为 ANSI 一致性 的测试。tcc 将 ANSI C 源代码编译成 16 位的 Thumb 指令代码。同时它的编译选项和用法
火龙果·整理 类似armec,具体使用请参考ADS软件的在线帮助文件。 > tcpp tcpp是Thumb C+编译器。它将ISOC+和EC+源码编译成l6位Thumb指令代 码。同时它的编译选项和用法类似armcc,具体使用请参考ADS软件的在线帮助文件。 armasm armasm是ARM和Thumb的汇编器。它对用ARM汇编语言和Thumb汇编语言写的 源代码进行汇编。在命令行输入:armasm-help将会看到armasm汇编器的用法以及它的编 译选项。 armasm [options]sourcefile objectfile armasm [options]-o objectfile sourcefile 上述是关于armasm两种基本用法,其中options为它的选项,常用的选项如下: -LIST:写一个列表文件在指定的文件 -Depend:保存编译后的依赖源文件 -Errors:将标准出错的诊断信息放到指定的文件中 -:添加目录到源文件的搜索路径 -PreDefine:预执行一个SET{L,A,S}指令 -NOCache:源缓冲关(默认是开) -MaxCache:定义最大缓冲的大小(默认是8M) -NOWarn:关闭打印告警信息 G:输出调试表 -APCS:使预定义匹配已选择proc-cal标准 -Help:打印帮助信息 -LIttleend:Little-endian ARM -BIgend:Big-endian ARM -MEMACCESS:说明目标内存系统的属性 -M:写源文件依赖性列表到标准输出 -MD:写源文件依赖性列表到标准输入 -CPU:设置目标ARM内核类型 -FPU:设置目标FP体系版本,SOFTVFP,SOFTFPA,VFP,FPA,NONE之一 -16:汇编16位Thumb指令 -32:汇编32位ARM指令 >armlink armlink是ARM链接器。该命令既可以将编译得到的一个或多个目标文件和相关的一 个或多个库文件进行链接,生成一个可执行文件,也可以将多个目标文件部分链接成一个目 标文件,以供进一步的链接。ARM链接器生成的是ELF格式的可执行映像文件。armlink 的一般用法如下: armlink option-list input-file-list 其中,option-list:是一个区分大小写的选项表:input-fle-list:是一系列库和对象文件。关 于armlink的具体使用请参考ADS软件的在线帮助文件。 armsd armsd是ARM和Thumb的符号调试器。它能够进行源码级的程序调试。用户可以在 用C或汇编语言写的代码中进行单步调试,设置断点,查看变量值和内存单元的内容。amsd 的一般用法如下: armsd [options][<imagefile>[<arguments>]]
类似 armcc,具体使用请参考 ADS 软件的在线帮助文件。 Ø tcpp tcpp 是 Thumb C++ 编译器。它将 ISO C++ 和 EC++ 源码编译成 16 位 Thumb 指令代 码。同时它的编译选项和用法类似 armcc,具体使用请参考 ADS 软件的在线帮助文件。 Ø armasm armasm 是 ARM 和 Thumb 的汇编器。它对用 ARM 汇编语言和 Thumb 汇编语言写的 源代码进行汇编。在命令行输入:armasm –help 将会看到 armasm 汇编器的用法以及它的编 译选项。 > armasm [options] sourcefile objectfile > armasm [options] -o objectfile sourcefile 上述是关于 armasm 两种基本用法,其中 options 为它的选项,常用的选项如下: -LIST:写一个列表文件在指定的文件 -Depend:保存编译后的依赖源文件 -Errors:将标准出错的诊断信息放到指定的文件中 -I:添加目录到源文件的搜索路径 -PreDefine:预执行一个 SET{L,A,S}指令 -NOCache:源缓冲关(默认是开) -MaxCache:定义最大缓冲的大小(默认是 8M) -NOWarn:关闭打印告警信息 -G:输出调试表 -APCS:使预定义匹配已选择 proc-call 标准 -Help:打印帮助信息 -LIttleend: Little-endian ARM -BIgend:Big-endian ARM -MEMACCESS:说明目标内存系统的属性 -M:写源文件依赖性列表到标准输出 -MD:写源文件依赖性列表到标准输入 -CPU:设置目标 ARM 内核类型 -FPU:设置目标 FP 体系版本,SOFTVFP, SOFTFPA, VFP, FPA, NONE 之一 -16:汇编 16 位 Thumb 指令 -32:汇编 32 位 ARM 指令 Ø armlink armlink 是 ARM 链接器。该命令既可以将编译得到的一个或多个目标文件和相关的一 个或多个库文件进行链接,生成一个可执行文件,也可以将多个目标文件部分链接成一个目 标文件,以供进一步的链接。ARM 链接器生成的是 ELF 格式的可执行映像文件。armlink 的一般用法如下: > armlink option-list input-file-list 其中,option-list:是一个区分大小写的选项表;input-file-list:是一系列库和对象文件。关 于 armlink 的具体使用请参考 ADS 软件的在线帮助文件。 Ø armsd armsd 是 ARM 和 Thumb 的符号调试器。它能够进行源码级的程序调试。用户可以在 用 C 或汇编语言写的代码中进行单步调试,设置断点,查看变量值和内存单元的内容。armsd 的一般用法如下: > armsd [options] [<imagefile> [<arguments>]]
火龙果·整理 子大⊙uml.org.cn 其中,options:是一系列调试选项;imagefile:定义一个AF或ELF文件的名字;arguments: 是被imagefile接受的命令行参数。关于armsd的具体使用请参考ADS软件的在线帮助文件。 讲到这里我们可以举一个简单的应用实例,来看看关于常用的ARM命令行是如何使用 的。以附件光盘中的SWI(Sotfware Interrupter)参考项目为例,它的编译命令如下: armasm-g a swi.s armcc-c-g-Ol main.c armcc -c-g-0l c swi.c armlink a swi.o main.o c_swi.o-o swi.axf 其中,armasm命令用来编译ARM汇编代码,armcc用来编译C代码,armlink用来最 终链接目标文件为ELF格式的可执行映像文件。 1.3.1.2GU1开发环境 ADS GUI开发环境包含Code Warrior和AXD两种,其中Code Warrior是集成开发工具, 而AXD是调试工具。下面将分别介绍这两个工具。 Code Warrior for ARM是一套完整的集成开发工具,充分发挥了ARM RISC的优势,使 产品开发人员能够很好的应用尖端的片上系统技术。该工具是专为基于ARM RISC的处理 器而设计的,它可加速并简化嵌入式开发过程中的每一个环节,使得开发人员只需通过一个 集成软件开发环境就能研制出ARM产品,在整个开发周期中,开发人员无需离开 CodeWarrior开发环境,因此节省了在操做工具上花的时间,使得开发人员有更多的精力投 入到代码编写上来,Code Warrior集成开发环境(DE)为管理和开发项目提供了简单多样化的 图形用户界面。用户可以使用ADS的CodeWarrior IDE为ARM和Thumb处理器开发用C, C++,或ARM汇编语言的程序代码。Code Warrior IDE缩短了用户开发项目代码的周期,主 要是由于:一是全面的项目管理功能,二是子函数的代码导航功能,使得用户迅速找到程序 中的子函数。关于CodeWarrior的具体使用将在下一节中具体介绍。 AXD(ARM eXtended Debugger),即ARM扩展调试器。调试器本身是一个软件,用户 通过这个软件使用调试代理可以对包含有调试信息的,正在运行的可执行代码进行比如变量 的查看,断点的控制等调试操作。调试代理既不是被调试的程序,也不是调试器。在ARM 体系中,它有这几种方式:Multi--ICE(Multi-processor in-circuit emulator),ARMulator和Angel。 其中Muti-ICE是一个独立的产品,是ARM公司自己的JTAG在线仿真器,不是由ADS提 供的。AXD可以在Windows和UNIX下,进行程序的调试。它为用C,C++,和汇编语言 编写的源代码提供了一个全面的Windows和UNX环境。后面的章节会具体介绍AXD工 具的使用方法。 1.3.1.3实用程序 ADS除了提供上述工具外,它还提供以下的实用工具来配合前面介绍的命令行开发工 具的使用。 >Flash downloader 用于把二进制映像文件下载到ARM开发板上的Flash存储器的工具 >fromELF 这是ARM映像文件转换工具。该命令将ELF格式的文件作为输入文件,将该格式转 换为各种输出格式的文件,包括plain binary(BN格式映像文件),Motorola32-bitS-record
其中,options:是一系列调试选项;imagefile:定义一个 AIF 或 ELF 文件的名字;arguments: 是被 imagefile 接受的命令行参数。关于 armsd 的具体使用请参考 ADS 软件的在线帮助文件。 讲到这里我们可以举一个简单的应用实例,来看看关于常用的 ARM 命令行是如何使用 的。以附件光盘中的 SWI(Sotfware Interrupter)参考项目为例,它的编译命令如下: armasm -g a_swi.s armcc -c -g -O1 main.c armcc -c -g -O1 c_swi.c armlink a_swi.o main.o c_swi.o -o swi.axf 其中,armasm 命令用来编译 ARM 汇编代码,armcc 用来编译 C 代码,armlink 用来最 终链接目标文件为 ELF 格式的可执行映像文件。 1.3.1.2 GUI 开发环境 ADS GUI 开发环境包含 Code Warrior 和 AXD 两种,其中 Code Warrior 是集成开发工具, 而 AXD 是调试工具。下面将分别介绍这两个工具。 CodeWarrior for ARM 是一套完整的集成开发工具,充分发挥了 ARM RISC 的优势, 使 产品开发人员能够很好的应用尖端的片上系统技术。该工具是专为基于 ARM RISC 的处理 器而设计的,它可加速并简化嵌入式开发过程中的每一个环节,使得开发人员只需通过一个 集成软件开发环境就能研制出 ARM 产品,在整个开发周期中,开发人员无需离开 CodeWarrior 开发环境,因此节省了在操做工具上花的时间,使得开发人员有更多的精力投 入到代码编写上来,CodeWarrior 集成开发环境(IDE)为管理和开发项目提供了简单多样化的 图形用户界面。用户可以使用 ADS 的 CodeWarrior IDE 为 ARM 和 Thumb 处理器开发用 C, C++,或 ARM 汇编语言的程序代码。CodeWarrior IDE 缩短了用户开发项目代码的周期,主 要是由于:一是全面的项目管理功能,二是子函数的代码导航功能,使得用户迅速找到程序 中的子函数。关于 CodeWarrior 的具体使用将在下一节中具体介绍。 AXD(ARM eXtended Debugger),即 ARM 扩展调试器。调试器本身是一个软件,用户 通过这个软件使用调试代理可以对包含有调试信息的,正在运行的可执行代码进行比如变量 的查看,断点的控制等调试操作。调试代理既不是被调试的程序,也不是调试器。在 ARM 体系中,它有这几种方式:Multi-ICE(Multi-processor in-circuit emulator),ARMulator 和 Angel。 其中 Multi-ICE 是一个独立的产品,是 ARM 公司自己的 JTAG 在线仿真器,不是由 ADS 提 供的。AXD 可以在 Windows 和 UNIX 下,进行程序的调试。它为用 C,C++,和汇编语言 编写的源代码提供了一个全面的 Windows 和 UNIX 环境。后面的章节会具体介绍 AXD 工 具的使用方法。 1.3.1.3 实用程序 ADS 除了提供上述工具外,它还提供以下的实用工具来配合前面介绍的命令行开发工 具的使用。 Ø Flash downloader 用于把二进制映像文件下载到 ARM 开发板上的 Flash 存储器的工具 Ø fromELF 这是 ARM 映像文件转换工具。该命令将 ELF 格式的文件作为输入文件,将该格式转 换为各种输出格式的文件,包括 plain binary(BIN 格式映像文件), Motorola 32-bit S-record
format(Motorola32位S格式映像文件),Intel Hex32 format(Intel32位格式映像文件),和 Verilog--like hex format(Verilog 16进制文件)。fromELF命令也能够为输入映像文件产生文本 信息,例如代码和数据长度。 >armar ARM库函数生成器将一系列ELF格式的目标文件以库函数的形式集合在一起,用户可 以把一个库传递给一个链接器以代替几个ELF文件。 1.3.1.4支持的软件 ADS为用户提供ARMulator软件,使用户可以在软件仿真的环境下或者在基于ARM 的硬件环境调试用户应用程序。ARMulator是一个ARM指令集仿真器,集成在ARM的调 试器AXD中,它提供对ARM处理器的指令集的仿真,为ARM和Thumb提供精确的模拟。 用户可以在硬件尚未做好的情况下,开发程序代码。 关于ADS软件主要由上述四个部分组成,下面将介绍在实际工作中经常用到的Code Warrior和AXD工具的基本使用。 1.3.2使用Code Warrior IDE Code Warrior IDE提供一个简单通用的图形化用户界面用于管理软件开发项目。可以利 用Code Warrior IDE开发C,C++和ARM汇编代码以ARM和Thumb处理器为对象。下面 将通过一个实例来讲述Code Warrior IDE的具体使用,为了使读者容易理解,这里还是以附 件光盘中提供的SWI项目为例,讲述Code Warrior IDE工具的使用。 1.3.2.1创建项目工程 建立项目工程是嵌入式实际开发中必不可少的一部分,因为工程将所有的源码文件组织 在一起,并能够决定最终生成文件存放的路径,输出的格式等。在CodeWarrior中新建一个 工程的方法有两种,可以在工具栏中单击“New”按钮,也可以在“File”菜单中选择“New..” 菜单。这样就会打开一个如图1.4所示的对话框
format(Motorola 32 位 S 格式映像文件),Intel Hex 32 format(Intel 32 位格式映像文件),和 Verilog-like hex format(Verilog 16 进制文件)。fromELF 命令也能够为输入映像文件产生文本 信息,例如代码和数据长度。 Ø armar ARM 库函数生成器将一系列 ELF 格式的目标文件以库函数的形式集合在一起,用户可 以把一个库传递给一个链接器以代替几个 ELF 文件。 1.3.1.4 支持的软件 ADS 为用户提供 ARMulator 软件,使用户可以在软件仿真的环境下或者在基于 ARM 的硬件环境调试用户应用程序。ARMulator 是一个 ARM 指令集仿真器,集成在 ARM 的调 试器 AXD 中,它提供对 ARM 处理器的指令集的仿真,为 ARM 和 Thumb 提供精确的模拟。 用户可以在硬件尚未做好的情况下,开发程序代码。 关于 ADS 软件主要由上述四个部分组成,下面将介绍在实际工作中经常用到的 Code Warrior 和 AXD 工具的基本使用。 1.3.2 使用 Code Warrior IDE Code Warrior IDE 提供一个简单通用的图形化用户界面用于管理软件开发项目。可以利 用 Code Warrior IDE 开发 C,C++和 ARM 汇编代码以 ARM 和 Thumb 处理器为对象。下面 将通过一个实例来讲述 Code Warrior IDE 的具体使用,为了使读者容易理解,这里还是以附 件光盘中提供的 SWI 项目为例,讲述 Code Warrior IDE 工具的使用。 1.3.2.1 创建项目工程 建立项目工程是嵌入式实际开发中必不可少的一部分,因为工程将所有的源码文件组织 在一起,并能够决定最终生成文件存放的路径,输出的格式等。在 CodeWarrior 中新建一个 工程的方法有两种,可以在工具栏中单击“New”按钮,也可以在“File”菜单中选择“New…” 菜单。这样就会打开一个如图 1.4 所示的对话框
Her Project File Object ARM Executable Image Project name ARM Object Library swil Empty Project Makefile Importer Wizard Location: Thumb ARM Interworking Image C:\TestCode\swi Set... Thumb Executable Image Thumb Object Library 厂Add to Proje Project: 确定 取消 图1.4新建工程对话框 在Project可选框中为用户提供了7种可选择的工程类型,分别是: >ARM Executable Image:用于由ARM指令的代码生成一个ELF格式的可执行映像文件: >ARM Object Library:用于由ARM指令的代码生成一个amar格式的目标文件库: Empty Project:用于创建一个不包含任何库或源文件的工程: >Makefile Importer Wizard:用于将Visual C的nmake或GNU make文件转入到 CodeWarrior IDE工程文件: Thumb ARM Interworking Image:用于由ARM指令和Thumb指令的混和代码生成一个 可执行的ELF格式的映像文件: >Thumb Executable image:用于由Thumb指令创建一个可执行的ELF格式的映像文件: >Thumb Object Library:用于由Thumb指令的代码生成一个armar格式的目标文件库。 在这里选择ARM Executable Image,然后在“Project name:”里输入名为swi的工程文 件名。接着在“Location::”项中点击“St.”按钮选择项目工程存放的位置,这里存放的 位置为C:TestCode。最后点击“确定”,即可建立一个新的名为swi的工程。 这个时候会出现swi.mcp的窗口,如图l.5所示,有三个标签页,分别为files,.link order,, target默认的是显示第一个标签页files。通过在该标签页点击鼠标右键,选中“Add Files...” 可以把要用到的源程序添加到工程中
图 1.4 新建工程对话框 在 Project 可选框中为用户提供了 7 种可选择的工程类型,分别是: Ø ARM Executable Image:用于由 ARM 指令的代码生成一个 ELF 格式的可执行映像文件; Ø ARM Object Library:用于由 ARM 指令的代码生成一个 armar 格式的目标文件库; Ø Empty Project:用于创建一个不包含任何库或源文件的工程; Ø Makefile Importer Wizard:用于将 Visual C 的 nmake 或 GNU make 文件转入到 CodeWarrior IDE 工程文件; Ø Thumb ARM Interworking Image:用于由 ARM 指令和 Thumb 指令的混和代码生成一个 可执行的 ELF 格式的映像文件; Ø Thumb Executable image:用于由 Thumb 指令创建一个可执行的 ELF 格式的映像文件; Ø Thumb Object Library:用于由 Thumb 指令的代码生成一个 armar 格式的目标文件库。 在这里选择 ARM Executable Image,然后在“Project name:”里输入名为 swi 的工程文 件名。接着在“Location:”项中点击“Set…”按钮选择项目工程存放的位置,这里存放的 位置为 C:\TestCode。最后点击“确定”,即可建立一个新的名为 swi 的工程。 这个时候会出现 swi.mcp 的窗口,如图 1.5 所示,有三个标签页,分别为 files,link order, target 默认的是显示第一个标签页 files。通过在该标签页点击鼠标右键,选中“Add Files…” 可以把要用到的源程序添加到工程中