ADS实例教程.pdf
《ADS实例教程.pdf》由会员分享,可在线阅读,更多相关《ADS实例教程.pdf(58页珍藏版)》请在冰点文库上搜索。
HelloWorld!
入门范例入门范例By下面以一个通过44B0的UART0输出字符串“HelloWorld!
”的小程序为例简单讲解一下ADS的初步使用。
本范例的阅读对象是初学者,并假设初学者已经安装ADS1.2(ARMDeveloperSuite)软件。
首先通过“开始”-“程序”-“ARMDeveloperSuiteV1.2”-“CodewarriorforARMDeveloperSuite”打开Codewarrior,Codewarrior是Metrowerks公司为ARM公司所开发的IDE。
图1,新建工程ADS为用户提供了7个模板,分别是:
ARMExecutableImage:
用于由ARM指令的代码生成一个ELF格式的可执行映象文件;ARMObjectLibrary:
用于由ARM指令的代码生成一个armar格式的目标文件库;EmptyProject:
用于创建一个不包含任何库或者源文件的工程;MakefileImporterWizard:
用于将VC的nmake或者GNUmake文件转入到CodeWarriorIDE工程文件;ThumbARMExecutableImage:
用于由ARM指令和Thumb指令的混合代码生成一个可执行的ELF格式的映象文件;ThumbExecutableimage:
用于由Thumb指令创建一个可执行的ELF格式的映象文件;ThumbObjectLibrary:
用于由Thumb指令的代码生成一个armar格式的目标http:
/电子发烧友http:
/电子技术论坛文件库。
一般情况下均选择“ARMExecutabelImage”,然后在“Projectname:
”栏输入工程名称,在“Location:
”栏指定路径,本例子的工程名称为“Hello”,点击确定后“Hello”工程建立。
图2,设置工程路径和工程名工程建立以后将生成一个空的工程管理窗口,如下图所示:
图3,工程管理窗口接下来就是向工程内添加和建立目标文件了,由于44B0学习评估板具有较多的资源,故其启动文件也较为复杂,所以一般都是直接打包使用,因此在添加启动文件之前请先将“44B0EVB”文件夹复制到“Hello”工程目录下,然后通过http:
/电子发烧友http:
/电子技术论坛工程管理窗口进行启动文件的添加,如下图所示:
图4,建立Group先通过点击右键选择“CreateGroup”,建立一个“44B0X”文件夹,然后再右键选择“AddFiles”来添加启动文件,如下图所示:
http:
/电子发烧友http:
/电子技术论坛图5,添加启动文件图6,添加文件到Target在添加文件的过程中你可能已经发现了CodeWarriorIDE为用户建立了三个Target,分别是“DebugRel”、“Realse”、“Debug”,这三个Target分别表示三种调试方式。
DebugRel表示在生成目标的时候会为每一个源文件生成调试信息;Debug表示为每一个源文件生成最完全的调试信息;Release表示不生成任何调试信息。
一般默认选择“DebugRel”。
同时从图6可以发现每次添加文件的时候都会询问添加到哪个“Target”,一般默认三个都添加,点击确定。
添加成功后会有一个如图7的提示:
http:
/电子发烧友http:
/电子技术论坛图7,ProjectMessages接下来建立一个main.c文件,可以通过“NEW”-“FILE”来建立,如下图:
图8,建立文件http:
/电子发烧友http:
/电子技术论坛图8中已经把“AddtoProject”前面的勾勾上了,所以main.c直接加入到了工程中,不然请在main.c建立后重新右键选择添加文件到工程。
最终的结果如下图所示:
图9,工程建立完毕工程建立完毕之后暂时还不能进行编译和链接,还需要进行一些配置。
http:
/电子发烧友http:
/电子技术论坛图10,工程配置可以通过“Edit”-“DebugRelSettings”或者“ALT+F7”或者点击图10中红色小圈内的快捷图标来进入“DebugRelSettings”。
如下图所示:
图11,“DebugRelSettings”http:
/电子发烧友http:
/电子技术论坛“DebugRelSettings”里面包含了很多设置信息,在此只说明几个和本范例相关的配置信息,如果想了解其他相关信息请参见“ADS文档”内的相关资料。
图12,“TargetSettings”“TargetSettings”里面有一处必须设置,即“Post-Linker”,“Post-Linker”用于对输出文件进行操作,由于本范例是需要最终写入到硬件中并运行的,所以必须进行设置(如果纯粹只需要进行软件仿真则此处可以不进行设置)。
这里选择“ARMfromELF”,表示编译后生成映象文件(Image)后再调用FromELF命令进行格式转换,以转换成.bin或者.hex等可以直接烧写到目标芯片执行的文件。
然后是“LanguageSettings”选项,本范例使用了“ARMAssembler”和“ARMCCompiler”所以请确保在这两个选项内的“Target”子选项内为“ARM7TDMI”(44B0为ARM7TDMI),如下图所示:
http:
/电子发烧友http:
/电子技术论坛图13,“LanguageSettings”设置完了“LanguageSettings”后接下来就是“Linker”选项了,在该选项里面有和硬件紧密相关的设置,首先进入“ARMLinker”子选项,在该子选项内需要设置入口地址(entry)、RO地址、RW地址。
首先设置R0/RW地址,RO表示ReadOnly,RW表示ReadWrite,RO栏默认是0x8000,需要根据实际硬件进行更改,一般为FLASH地址,RO也可以设置在SDRAM中,启动代码中包含COPY的部分,会将代码移动到SDRAM中运行,这对44B0特别适合,因为SDRAM很大,而且对速度的提升也很明显。
entrypoint必须同RO一致,以提供连接器定位信息本44B0板的FLASH地址即为0x00000000;RW栏默认为空,一般为SDRAM地址,本44B0板的地址即为0x0C000000(RO也可以设置在SDRAM中但entrypoint必须同RO一致)。
http:
/电子发烧友http:
/电子技术论坛图14,“ARMLinker”-“Output”图15,“ARMLinker”-“Options”在“ARMLinker”-“Options”内还需要设置一个“Imageentrypoint”,表示映象文件的入口地址。
设置完“Imageentrypoint”后继续在“Layout”里面设置代码中的哪一段置于IMAGE的起始位置:
http:
/电子发烧友http:
/电子技术论坛图中vector.oSelfBoot的意思就是将vector.o置于IMAGE的起始位置,必须设置!
图16,“ARMLinker”-“Layout”在“Linker”选项下还有一个子选项需要进行设置,即“ARMfromELF”,在“Target”的“Post-Linker”设置成“FromELF”后在这里需要进一步进行设置。
http:
/电子发烧友http:
/电子技术论坛图17,“Linker”-“ARMfromELF”-“Outputformat”参照图17进行输出文件格式的设置,一般设置成“Plainbinary”或者“Intel32bithex”。
图18,“Linker”-“ARMfromELF”-“Outputfilename”参照图18进行输出文件名称和路径的设置,请带上扩展名.bin或者.hex。
当工程文件是从别处copy过来的时候请记得对该路径进行重新设置,不然将出现警告提示。
到此为止已经完成基本设置,接下来可以进行编译和链接。
如果你的工程文件是从别处copy过来的则在编译之前还有一件事情需要做,即“RemoveObjectCode”,在选项在“Project”菜单下面,如图19所示,如果红圈内的.c文件前面没有勾的图标的话表示该工程已经编译链接通过,如果需要重新编译则需要先进行“RemoveObjectCode”操作以去除一些和路径、目标文件等有关联的信息。
“RemoveObjectCode”操作后如图20所示,请对比图19和20。
http:
/电子发烧友http:
/电子技术论坛图19,“RemoveObjectCode”图20,需要编译的文件前有勾状图标然后“Project”-“Make”或者F7,如果一切设置正确则出现如下提示:
http:
/电子发烧友http:
/电子技术论坛图21,MAKE结果如果有错误和警告请一一改正,直至编译通过。
最终生成可执行文件hello.bin/hello.hex(因具体设置而异)和调试文件hello.axf(映象文件)。
其中可执行文件的路径由用户在“LINKER”-“ARMfromELF”中的设置所决定;而调试文件(映象文件)“hello.axf“则默认生成在“.HelloHello_DataDebugRel”下。
Hello.bin/hello.hex可以通过工具软件直接烧入目标芯片运行,hello.axf可以通过ADS里面集成的AXD调试工具进行调试,可以软件仿真或者外部通过第三方JTAG调试工具进行调试。
下面简单讲解一下用AXD进行代码调试的流程:
AXD(ARMeXtendedDebugger)是ADS软件中独立于CodeWarriorIDE的图形软件,打开AXD软件,默认是打开的目标是ARMulator。
这个也是调试的时候最常用的一种调试工具,即软件仿真,下面内容主要是结合ARMulator介绍在AXD中进行代码调试的方法和过程,使读者对AXD的调试有初步的了解,在介绍完ARMulator之后将会在后文继续简单讲解如何通过JTAG开发工具进行硬件仿真。
要使用AXD必须首先要生成包含有调试信息的程序,在前面的hello工程中,已经生成的hello.axf就是包含有调试信息的可执行ELF格式的映像文件。
1.在AXD中打开调试文件可以有两种方法打开AXF文件,一是在make完成后通过“Project”-“Debug”或者F7进入AXD,另外也可以通过“开始”-“程序”-“ARMDeveloperSuite”http:
/电子发烧友http:
/电子技术论坛-“AXD”打开AXD,然后再在菜单“File”中选择“Loadimage”选项,打开LoadImage对话框,找到要装载的.axf映像文件,点击“打开”按钮,就把映像文件装载到目标内存中了。
在所打开的映像文件中会有一个蓝色的箭头指示当前执行的位置。
对于本例,打开映像文件后,如图22所示:
图22在axd下打开映像文件在菜单Execute中选择“Go”,将全速运行代码。
要想进行单步的代码调试,在Execute菜单中选择“Step”选项,或用F10即可以单步执行代码,窗口中蓝色箭头会发生相应的移动。
有时候,用户可能希望程序在执行到某处时,查看一些所关心的变量值,此时可以通过断点设置达到此要求。
将光标移动到要进行断点设置的代码处,在Execute菜单中,选择“ToggleBreakpoint”或按F9,就会在光标所在位置出现一个实心圆点,表明该处为断点。
还可以在AXD中查看寄存器值,变量值,某个内存单元的数值等等。
下面就结合本章中的例子,介绍在AXD中调试过程。
注意:
在打开AXD的时候可能会出现如下的错误,请按照下文指示进行处理。
图23,Warninghttp:
/电子发烧友http:
/电子技术论坛点击确定,出现另一对话框:
图24,Loadsessionfile点击“取消”进入AXD。
图25,ConfigureTarget进入AXD后通过“Option”-“ConfigureTarget”选择调试目标。
由于当前采用“ARMulator”进行软件仿真,故选择ARMUL,如下图所示:
http:
/电子发烧友http:
/电子技术论坛图26,选择ARMUL图27,点击OK,进入图27所示状态。
http:
/电子发烧友http:
/电子技术论坛图28,LoadImage然后LoadImage,在hello工程下面的“DebugRel”文件夹内找到hello.axf文件,然后调入。
另外在使用JTAG调试的时候还可能出现弹出FatalAXDError窗口,如下图所示,此时可以点击“Connectmode.”,然后选择“ATTACH.”项确定,再点击“Restart”。
接下来就可以使用【File】-【LoadImage.】加载调试文件,进行JTAG调试。
图29,FatalAXDError2.查看存储器内容在程序运行前,可以先查看两个宏变量IOPMOD和IOPDATA的当前值。
方法是:
从ProcessorViews菜单中选择“Memory”选项,如图30所示。
http:
/电子发烧友http:
/电子技术论坛图30查看存储器内容在MemoryStartaddress选择框中,用户可以根据要查看的存储器的地址输入起始地址,在下面的表格中会列出连续的64个地址。
因为I/O模式控制寄存器和I/O数据控制寄存器都是32位的控制寄存器,所以从0x3ff5000开始的连续四个地址空间存放的是I/O模式控制寄存器的值,从图8.11可以读出该控制寄存器的值开始为0xE7FF0010,I/O数据控制寄存器的内容是从地址0x3FF5008开始的连续四个地址空间存放的内容。
从图23中可以看出IODATA中的初始值为0xE7FF0010,注意因为用的是小端模式,所以读数据的时候注意高地址中存放的是高字节,低地址存放的是低字节。
现在对程序进行单步调试,当程序运行到for循环处时,可以再一次查看这两个寄存器中的内容,此时存储器的内容如图31所示:
图31单步运行后的存储器内容从图中可以看出运行完两个赋值语句后,两个寄存器的内容的确发生了变化,在地址0x3FF5000作为起始地址的连续四个存储单元中,可以读出I/O模式控制寄存器的内容为0xFFFFFFFF,在地址0x3FF5008开始的连续的四个存储单元中,可以读出I/O数据控制寄存器的内容为0x00000001。
3.设置断点可以在for循环体的“Delay(500000);”语句处设置断点,将光标定位在该语句处,使用快捷键F9在此处设置断点,按F5键,程序将运行到断点处,如果读者想查看子函数Delay是如何运行的,可以在Execute菜单中选择“StepIn”选项,或按下F8键,进入到子函数内部进行单步程序的调试。
如图32所示。
4.查看变量值在Delay函数的内部,如果用户希望查看某个变量的值,比如查看变量i的http:
/电子发烧友http:
/电子技术论坛值,可以在ProcessorViews菜单中选择“Watch”,会出现如图32所示的watch窗口,然后用鼠标选中变量i,点击鼠标邮件,在快捷菜单中选中“Addtowatch”,如图32所示,这样变量i默认是添加到watch窗口的Tab1中。
程序运行过程中,用户可以看到变量i的值在不断的图32设置断点图33查看变量http:
/电子发烧友http:
/电子技术论坛图34改变变量的格式变化。
默认显示变量数值是以十六进制格式显示的,如果用户对这种显示格式不习惯的话,可以通过在watch窗口点击鼠标右键,在弹出的快捷菜单中选择“Format”选项,如图34所示,用户可以选择所查看的变量显示数据的格式。
如果用户想从Delay函数中跳出到主函数中去,最简单的方法就是将光标定位到你想跳转到的主函数处,在Execute菜单中选择“RuntoCursor”选项,则程序会从Delay函数中跳转到光标所在位置。
“ARMulator”仿真一般是在不具备硬件条件的情况下进行软件仿真,多用于学习状态,并不能完全反映实际硬件运行状态。
接下来简单讲解用JTAG工具进行硬件调试的流程。
很多公司都有支持ADS的JTAG调试工具,象ARM公司,IAR公司,周立功公司等等,但是一般大公司的这些JTAG工具都是性能强大但是价格昂贵,其实也可以通过一些第三方的免费或者评估软件配合简易的JTAG小板进行调试开发,这其中流传的最广的可以算BANYANII软件和Wiggler板了。
首先需要安装BANYANII软件,并在调试前先运行它,具体安装和使用请参见BANYANII的用户手册。
安装完Banyan后,在:
开始程序-Banyan中打开Daemon,(即任务栏右下脚那只爬虫),出现如下所示图35:
http:
/电子发烧友http:
/电子技术论坛图35,启动BANYAN启动BANYAN并将目标板通过WigglerJTAG板连接到计算机的并口后首先需要通过BANYAN来检测目标是否连接正确。
虽然图示出现ARM7TDMI字样,但是该提示未必表示真正找到了44B0X板,并检测到44B0X,首先需要进行硬件设置,请点击HardwareSetting菜单,出现如下页面:
图36,HardwareSetuphttp:
/电子发烧友http:
/电子技术论坛BANYAN支持Wiggler和Predefined两种简易JTAG调试工具,由于我们使用的是兼容的简易WigglerJTAG调试工具,故需在InterfaceDevice里面设置成“Wiggler”,一般默认情况即为“Wiggler”,如果设置不正确将不能找到目标芯片44B0X。
请切记完成该步骤!
在完成硬件设置后即可检测JTAG工具能否连上目标板上的44B0X了,请点击Detect菜单选项,如果连接正确将真正检测ARM7TDMI核,如果连接错误将出现错误提示,如下图37:
图37,错误提示如果出现此错误提示请仔细检查电路连接和电源情况,直至按下“Detect”后出现图35的信息为止。
接下来就可以在AXD软件里面通过“Option”-“ConfigureTarget”设置“TargetEnviroments”,如下图所示:
http:
/电子发烧友http:
/电子技术论坛图38,选择Target为BANYAN接下来的流程就和使用“ARMulator”相差无几了,不过使用试用版本的BANYAN有不少功能限制,具体内容请参照BANYAN软件的用户手册。
最近网上还有一个叫XJTAG的调试代理软件也具备BANYAN的功能,而且是免费的,如果有兴趣可以下载安装并评估。
安装和配置过程简要如下:
点击进行安装,点击两次NEX后即可完成安装。
安装完成后通过点击快捷图标XJTAGBETA.lnk或者“开始”-“程序”-“XJTAGBETA0.2”-“XJTAGBETA”运行,该软件类似BANYAN,需要在ADS调用XJTAG的“XDI.DLL”之前先行开启代理软件“XJTAG.exe”。
界面如下图39:
图39,XJTAG代理软件对于本44B0板无须另行设置,默认设置即可正确运行,如有需要可以通过“Settings”菜单进行“JTAGSettings”、“PortSettings”、“TargetSettings”进行设置。
其中“JTAGSettings”用于设置JTAG类型,如下图,对于本44B0板应选择WigglerJTAG、另外“PortSettings”用于设置采用并口1还是2,一般都是1,“TargetSettings”用于设置目标芯片的内核,当前XJTAG支持ARM7和ARM9,可以直接选择或者设置成AUTO。
http:
/电子发烧友http:
/电子技术论坛图40,JTAGSettings另外“Options”可以对复位进行选择,对于本44B0板默认即可,该选项应和实际硬件(JTAG板)相结合进行设置。
图41,OptionsXJTAG在启动的时候即会通过默认配置对目标芯片进行搜索,如果连接正确应该出现如图39所示。
如果连接不上则会出现如图42的错误提示,请检查电源和连接然后重新“Detect”直至出现图39的提示。
http:
/电子发烧友http:
/电子技术论坛图42,Error检测到目标芯片后即可以在ADS里面进行调试了,只需要在AXD的“Option”-“ConfigureTarget”里面设置成“XDI”即可。
如下图所示,XDI即对应XJTAG。
图43,ChooseTarget设置完成即可和BANYAN一样进行调试,不过XJTAG没有BANYAN的爬虫直观,在调试过程中不会有其他提示,而BANYAN软件在调试过程中右下角任务栏上的爬虫会闪烁,表示有数据传输。
http:
/电子发烧友http:
/电子技术论坛另外还有一个支持ARM7ARM9的Wiggler&SDTJtagCable的RDI接口驱动crdi.dll(Ver2.0beta42005-5-4),也可以在通过ADS设置然后配合Wiggler进行JTAG调试。
该驱动无须安装,下载后解压,然后在AXD的“ChooseTarget”菜单下选择“Add”,然后将目录指向该驱动所在位置即可,如图:
图44,添加“Target”添加完成后选择“JTAG”,然后点击“Configure”进行配置,出现下图所示内容:
图55,RDISettinghttp:
/电子发烧友http:
/电子技术论坛第一栏为“DebugConfig”,可以对复位、下载、初始化、大小端等进行设置。
第二栏为“ChipsetInitialization”,可以选择或者修改或者自行新建适合自己的目标芯片的SFR列表,当前支持的目标芯片有85个之多,可以选择目标芯片任何参照现有的CFG文件进行修改以适合自己的系统。
图56,ChipsetInitialization如果配置正确点击确定后AXD应该会提示找到目标芯片,如下图:
图57,找到44B0AXD提示找到WigglerJTAGCable,并发现代码为“0x1F0F0F0F”,此代码http:
/电子发烧友http:
/电子技术论坛即为44B0的ID。
由于我们使用的都是简易的WigglerJTAG工具配合一些免费或者试用版本的第三方软件,而这些工具一般都有Flash下载的限制,不能直接在AXD里面完成代码的下载,而需要另外的第三方软件来实现可执行文件(一般为BIN或HEX文件)的下载,感谢这几年如火如荼的ARM推广运动,使得我们有不少免费的或者有功能限制的FLASH烧写软件可以使用。
下面简单介绍几种比较常见的工具。
首先是最为常见但是也是性能最差的免费软件FLUTED.EXE,FLUTED是一个基于命令行的程序,可以在2KXP的命令提示符下进行操作,其参数如下:
FlashProgrammingToolvia