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 操作系统。
1、使用ADS 创建工程<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
本节通过一个具体实例,为读者介绍如何使用该集成开发环境,利用CodeWarrior 提供
的建立工程的模板建立自己的工程,并学会如何进行编译链接,生成包含调试信息的映像文
件和可以直接烧写到FLASH 中的.bin 格式的二进制可执行文件。
(1) 新建一个工程
打开一个如图 1 所示的对话框:
图1 新建工程对话框
工程将所有的源码文件组织在一起,并能够决定最终生成文件存放的路径,输出的格式等。在CodeWarrior中新建一个工程的方法有两种,可以在工具栏中单击“New”按钮,也 可以在“File”菜单中选择“New…”菜单。 在上图对话框中为用户提供了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 Executable Image:用于由ARM 指令和Thumb 指令的混和代码生成一个可执行的 ELF 格式的映像文件;
Thumb Executable image:用于由Thumb 指令创建一个可执行的ELF 格式的映像文件;
Thumb Object Library:用于由Thumb 指令的代码生成一个armar 格式的目标文件库。
在这里选择ARM Executable Image,在“Project name:”中输入工程文件名,本例为“ASM”,点击“Location:”文本框的“Set…”按钮,浏览选择想要将该工程保存的路径,将这些设置好后,点击“确定”,即可建立一个新的名为ASM 的工程。
这个时候会出现ASM.mcp 的窗口,如图 2 所示,有三个标签页,分别为files,link order,target 默认的是显示第一个标签页files。通过在该标签页点击鼠标右键,选中“Add Files…”可以把要用到的源程序添加到工程中。
图 2 新建工程打开窗口
将已准备好的源文件(.s 和.c 文件)添加进去,添加过程如下图(图3):
图 3
点击“打开”按钮确定。
在这里还有一个细节,希望读者注意。在建立好一个工程时,默认的target 是DebugRel,
还有另外两个可用的target,分别为Realse 和Debug,这三个target 的含义分别为:
DebugRel:使用该目标,在生成目标的时候,会为每一个源文件生成调试信息;
Debug:使用该目标为每一个源文件生成最完全的调试信息;
Release:使用该目标不会生成任何调试信息。
在本例中,使用默认的DebugRel 目标。
在这里选择ARM Executable Image,在“Project name:”中输入工程文件名,本例为“ASM”,点击“Location:”文本框的“Set…”按钮,浏览选择想要将该工程保存的路径,将这些设置好后,点击“确定”,即可建立一个新的名为ASM 的工程。
这个时候会出现ASM.mcp 的窗口,如图 2 所示,有三个标签页,分别为files,link order,target 默认的是显示第一个标签页files。通过在该标签页点击鼠标右键,选中“Add Files…”可以把要用到的源程序添加到工程中。
将已准备好的源文件(.s 和.c 文件)添加进去,添加过程如下图(图3):
点击“打开”按钮确定。
在这里还有一个细节,希望读者注意。在建立好一个工程时,默认的target 是DebugRel,
还有另外两个可用的target,分别为Realse 和Debug,这三个target 的含义分别为:
DebugRel:使用该目标,在生成目标的时候,会为每一个源文件生成调试信息;
Debug:使用该目标为每一个源文件生成最完全的调试信息;
Release:使用该目标不会生成任何调试信息。
在本例中,使用默认的DebugRel 目标。
为工程添加源码常用的方法有两种,既可以使用入图 3 所示方法,也可以在
“Project”菜单项中,选择“Add Files…”,这两种方法都会打开文件浏览框,用户可以
把已经存在的文件添加到工程中来。当选中要添加的文件时,会出现一个对话框,如图 4
所示,询问用户把文件添加到何类目标中,在这里,我们选择DebugRel 目标。把ASM.s(ASM.s
的参考代码下面章节)添加到工程中来。
图 4 选择添加文件到指定目标
到目前为止,一个完整的工程已经建立。下面该对工程进行编译和链接工作。
(2)编译和链接工程
在进行编译和链接前,首先讲述一下如何进行生成目标的配置。点击 Edit 菜单,选择“DebugRel Settings…”(注意,这个选项会因用户选择的不同目标而有所不同),出现如图 5 所示的对话框。这个对话框中的设置很多,在这里介绍一些最为常用的设置选项,读者若对其它未涉及到的选项感兴趣,可以查看相应的帮助文件。target 设置选项。TargetName 文本框显示了当前的目标设置。Linker 选项供用户选择要使用的链接器。在这里默认选择的是ARM Linker,使用该链接器,将使用armlink 链接编译器和汇编器生成的工程中的文件相应的目标文件。
图 5 DebugRel 设置对话框
这个设置中还有两个可选项,None 不是不用任何链接器,如果使用它,工程中的所有文件都不会被编译器或汇编器处理。ARM Librarian 表示将编译或汇编得到的目标文件转换为ARM 库文件。对于本例,使用默认的链接器ARM Linker。
Pre-linker:目前CodeWarrior IDE 不支持该选项。
Post-Linker:选择在链接完成后,还要对输出文件进行的操作。因为在本例中,希望生成一个可以烧写到Flash 中去的二进制代码,所以在这里选择ARM fromELF,表示在链接生成映像文件后,再调用FromELF 命令将含有调试信息的ELF 格式的映像文件转换成其它格式的文件。
?? Language Settings
因为本例中包含有汇编源代码,所以要用到汇编器。ADS 集成开发环境的汇编器是armasm,默认的ARM 体系结构是ARM920T。字节顺序默认就是小端模式。其它设置,就用默认值即可。
还有一个需要注意的就是ARM C 编译器,它实际就是调用的命令行工具armcc。使用默认的设置就可以了。
细心的读者可能会注意到,在设置框的右下脚,当对某项设置进行了修改,该行中的某个选项就会发生相应的改动。实际上,这行文字就显示的是相应的编译或链接选项,由于有了CodeWarrior,开发人员可以不用再去查看繁多的命令行选项,只要在界面中选中或撤消某个选项,软件就会自动生成相应的代码,为不习惯在DOS 下键入命令行的用户提供了极大的方便。
?? Linker 设置
鼠标选中ARM Linker,出现如图 7 所示对话框。这里详细介绍该对话框的主要的
标签页选项,因为这些选项对最终生成的文件有着直接的影响。
在标签页Output 中,Linktype 中提供了三种链接方式。Partial 方式表示链接器只进行部分链接,经过部分链接生成的目标文件,可以作为以后进一步链接时的输入文件。Simple方式是默认的链接方式,也是最为频繁使用的链接方式,它链接生成简单的ELF 格式的目标文件,使用的是链接器选项中指定的地址映像方式。Scattered 方式使得链接器要根据scatter 格式文件中指定的地址映像,生成复杂的ELF 格式的映像文件。这个选项一般情况下,使用不太多。
图 6 命令行工具选项设置
图 7 链接器设置1
图 8 设置映像文件的入口点
因为所举的例子比较简单,选择Simple 方式就可以了。在选中Simple 方式后,就会出
现Simple image。
RO Base:这个文本框设置包含有RO 段的加载域和运行域为同一个地址。默认是0x8000。这里用户要根据自己硬件的实际SDRAM 的地址空间来修改这个地址,保证在这里填写的地址,是程序运行时,SDRAM 地址空间所能覆盖的地址。针对本书所介绍的目标板,SDRAM 的空间范围为0x30000000~0x34000000,这里设置为0x30100000。
RW Base:这个文本框设置了包含RW 和ZI 输出段的运行域地址。如果选中split 选项,链接器生成的映像文件将包含两个加载域和两个运行域,此时,在RW Base 中所输入的地址为包含RW 和ZI 输出段的域设置了加载域和运行域地址
Ropi:选中这个设置将告诉链接器使包含有RO 输出段的运行域位置无关。使用这个选项,链接器将保证下面的操作:检查各段之间的重寻址是否有效;确保任何由armlink 自身生成的代码是只读位置无关的。
Rwpi:选中该选项将会告诉链接器使包含RW 和ZI 输出段的运行域位置无关。如果这个选项没有被选中,域就标识为绝对。每一个可写的输入段必须是和读写位置无关的。如果这个选项被选中,链接器将进行下面的操作:
检查可读/可写属性的运行域的输入段是否设置了位置无关属性;
检查在各段之间的重地址是否有效;
在Region$$Table 和ZISection$$Table 中添加基于静态存储器sb 的选项。
该选项要求RW Base 有值,如果没有给它指定数值的话,默认为0 值。
Split Image:选择这个选项把包含RO 和RW 的输出段的加载域分成2 个加载域:一个是包含RO 输出段的域,一个是包含RW 输出段的域。
这个选项要求RW Base 有值,如果没有给RW Base 选项设置,则默认是-RW Base 0。
Relocatable:选择这个选项保留了映像文件的重寻址偏移量。这些偏移量为程序加载器提供了有用信息。在Options 选项中,需要读者引起注意的是Image entry point 文本框。它指定映像文件的初始入口点地址值,当映像文件被加载程序加载时,加载程序会跳转到该地址处执行。如果需要,用户可以在这个文本框中输入下面格式的入口点:
入口点地址:这是一个数值,例如-entry 0x0
符号:该选项指定映像文件的入口点为该符号所代表的地址处,比如:-entry int_handler 如果该符号有多处定义存在,armlink 将产生出错信息。
offset+object(section):该选项指定在某个目标文件的段的内部的某个偏移量处为映像文件的入口地址,例如:-entry 8+startup(startupseg)在此处指定的入口点用于设置ELF映像文件的入口地址。需要引起注意的是,这里不可以用符号main 作为入口点地址符号,否则将会出现类似“Image dose not have an entry point(Not specified or not set due to multiple choice)”的错误信息。在Layout 选项中,需要的设置如图 8,设置asm.o目标文件中的Init 为整个文件的入口点。关于ARM Linker 的设置还有很多,对于想进一步深入了解的读者,可以查看帮助文件,都有很详细的介绍。
在Linker 下还有一个ARM fromELF:
fromELF 是一个实用工具,它实现将链接器,编译器或汇编器的输出代码进行格式转换的功能。例如,将ELF 格式的可执行映像文件转换成可以烧写到ROM 的二进制格式文件;对输出文件进行反汇编,从而提取出有关目标文件的大小,符号和字符串表以及重寻址等信息。只有在Target 设置中选择了Post-linker,才可以使用该选项。
在Output format 下拉框中,为用户提供了多种可以转换的目标格式,本例选择Plain binary,这是一个二进制格式的可执行文件,可以被烧些的目标板的Flash 中。
在Output file name 文本域输入期望生成的输出文件存放的路径,或通过点击Choose...按钮从文件对话框中选择输出文件。如果在这个文本域不输入路径名,则生成的二进制文件存放在工程所在的目录下。进行好这些相关的设置后,以后在对工程进行make 的时候,CodeWarrior IDE 就会在链接完成后调用fromELF 来处理生成的映像文件。
对于本例的工程而言,到此,就完成了make 之前的设置工作了。
文章评论(0条评论)
登录后参与讨论