1、ADS1.2应用,实物图,实物说明图,ADS模板,由ARM指令的代码生成一个ELF 格式的可执行映象文件,由ARM指令的代码生成一个armar 格式的目标文件库,创建一个不包含任何库或者源文件的工程,将VC的nmake或GNUmake文件转入到Code Warrior IDE 工程文件,由ARM和Thumb的指令混合代码生成一可执行的ELF格式的映象文件,由Thumb指令创建一个可执行的ELF格式的映象文件,由Thumb指令的代码生成一个armar格式的目标,创建工程,一般情况下选择第一项,然后在“Project name:”栏输入工程名称,在“Location:”栏指定路径,例如工程名称为“
2、Hello”,点击确定后工程建立。,工程管理窗口,工程建立以后将生成一个空的工程管理窗口,如下图所示:,点击此项添加或新建源文件,鼠标右击此区域进行文件的添加,添加文件到Target,在添加文件的过程中CodeWarrior IDE 为用户建立了三个Target:DebugRel、Realse、Debug。 这三个Target 分别表示三种调试方式。DebugRel:在生成目标的时候 为每一个源文件生成调试信息。Debug:为每一个源文件生成最 完全的调试信息。Release :不生成任何调试信息。 一般默认选择“DebugRel”。,配置生成目标,单击此图标或ALT+F7进行设置,Debug
3、 Setting,改为ARM920T,ARM LINKER设置,0X30000000是开发板SDRAM的真实地址,0X31000000是系统可读写内存的地址,二者之间是只读区域,存放程序的代码段,之后是程序的数据段。,RO表示只读,RW表示读写,RO栏默认是0x8000,需要根据实际硬件进行更改,一般为FLASH 地址,RO也可以设置在SDRAM 中,启动代码中包含COPY 的部分,会将代码移动到SDRAM中运行。,Options选项,Image entry point表示映象文件的入口地址,文件路径必须是纯西文的。,Layout选项,Layout选项在连接方式位simple时有效,是输入段在
4、映像文件中的位置。,该项用于指定将某输入段放置在它所运行时域的开头。,Object/Symbol中指定目标文件的名称init.s,在Section中指定输入段的名称init,确定源文件中的init输入段位指定的输入段。,ARM from ELF设置,Output file name,参照上图进行输出文件名称和路径的设置,须带上扩展名.bin 或者.hex。当工程文件是从别处copy 过来的时候请记得对该路径进行重新设置,不然将出现警告提示。 到此为止已经完成基本设置,接下来可以进行编译和链接。,Remove Object Code操作,如果工程文件是从别处copy过来的,在编译之前还要Remo
5、ve Object C-ode。该选项在“Pr-oject”菜单下面。,如果红圈内的.c 文件前面没有勾图标,表示该工程已经编译链接通过,如果需要重新编译则需要先进行“Remove Object Code”操作以去除一些和路径、目标文件等有关联的信息。,AXD调试流程,AXD(ARM eXtended Debugger)是ADS 软件中独立于CodeWarrior IDE 的图形软件,打开AXD 软件,默认是打开的目标是ARMulator。这个也是调试时最常用的一种调试工具,即软件仿真。 要使用AXD 必须首先要生成包含有调试信息的程序,即*.axf 文件,该类文件包含有调试信息的可执行ELF
6、 格式的映像文件。,在AXD中打开调试文件,有两种方法打开AXF文件:在make 完成后通过“Project”-“Debug”或者F7 进入AXD;还可以通过“开始”-“程序”-“ARM Developer Suite”-“AXD”打开AXD,然后再在菜单“File”中选择“Load image”选项,打开Load Image 对话框,找到要装载的.axf 映像文件,点击“打开”按钮,就把映像文件装载到目标内存中了。,在所打开的映像文件中会有一个蓝色的箭头指示当前执行的位置。,在菜单Execute 中选Go,将全速运行代码;选Step项或F10进行单步的代码调试,窗口中蓝色箭头会发生相应的移动
7、。选择Toggle Breakpoint或F9,会在光标所处出现一个实心圆点,即断点。,注意事项,选择调试目标,进入AXD 后通过Option-Configure Target选择调试目标。由于当前采用“ARMulator”进行软件仿真,故选择ARMUL,如下图所示:,查看存储器内容,在程序运行前,可以先查看两个宏变量IOPMOD 和IOPDATA 的当前值。方法是:从Processor Views 菜单中选择“Memory”选项。,因为I/O 模式控制寄存器和I/O 数据控制寄存器都是32位的控制寄存器,所以从0x3ff5000 开始的连续四个地址空间存放的是I/O 模式控制寄存器的值,I/
8、O 数据控制寄存器的内容是从地址0x3FF5008 开始的连续四个地址空间存放的内容。IODATA 中的初始值为0x E7FF0010,因为用的是小端模式,所以读数据的时候注意高地址中存放的是高字节,低地址存放的是低字节。,设置断点,将光标定位在欲设置断点语句处,按F9在此处设置断点,按F5 键程序将运行到断点处,想查看某个函数是如何运行的,可在Execute 菜单中选择Step In选项,或按F8 键,进入到子函数内部进行单步程序的调试。,查看变量,在函数的内部,如果希望查看某个变量的值,可以在Processor Views 菜单中选择“Watch”,会出现如下图所示的watch窗口,然后用鼠标选中变量右击,在快捷菜单中选中“Add to watch”,这样变量添加到watch窗口的Tab1中。程序运行过程中可看到变量的值在不断变化。,Codewarrior使用小技巧,有时双击打开工程文件时,会出现下图这样的错误提示:,说明该工程文件的路径包含了中文,不能双击打开。只能通过“file” “open”来打开。最好不要将工程放在中文路径下。,利用codewarrior快速查找,CodeWarrior是一个优秀的集成开发环境,在Co-deWarrior里查找函数原型,查找包含文件非常方便。,