ARM嵌入式系统第8章ARMADS集成开发环境第8章ARMADS集成开发环境ARM开发工具简介ARM应用软件的开发工具根据功能的不同,分别有编译软件、汇编软件、链接软件、调试软件、嵌入式实时操作系统、函数库、评估板、JTAG仿真器、在线仿真器等,目前世界上约有四十多家公司提供以上不同类别的产品。第8章ARMADS集成开发环境常见的调试方法有以下几种:1.指令集模拟器2.驻留监控软件3.JTAG仿真器4.在线仿真器第8章ARMADS集成开发环境ARMADS的英文全称为ARMDeveloperSuite,是ARM公司推出的新一代ARM集成开发工具,用来取代ARM公司以前推出的开发工具ARMSDT,目前ARMADS的最新版本为1.2。ARMADS支持所有ARM系列处理器,除了ARMSDT支持的运行操作系统外还可以在Windows2000/Me以及RedHatLinux上运行。第8章ARMADS集成开发环境ARMADS由六部分组成:代码生成工具(CGT)集成开发环境(CWI)调试器(Debuggers——AXD、Armsd)指令集模拟器(ISS)ARM开发包(ARMFirmwareSuite)ARM应用库(ARMApplicationsLibrary)其中重点介绍一下图形界面开发工具。AXD提供给基于Windows和UNIX使用的ARM调试器。它提供了一个完全的Windows和UNIX环境来调试你的C,C++,和汇编语言级的代码。CodeWarriorIDE提供基于Windows使用的工程管理工具。它的使用使源码文件的管理和编译工程变得非常方便。但CodeWarriorIDE在UNIX下不能使用。创建工程ADS中的CodeWarrior是集管理、编辑、编译、链接于一体的集成开发环境。用户可以利用工程管理的思想组织项目开发中的源文件、库文件、头文件和其他相关的输入输出文件。工程能够将所有的源码文件有机地组织在一起,并决定最终生成文件存放的路径,输出的格式等。下面从最基本的工程创建入手介绍CodeWarrior集成开发环境。CodeWarriorIDE主界面使用ADS中的CodeWarrior项目管理器来管理源代码。一个嵌入式系统项目通常是由多个文件构成的,包括用不同的语言(汇编或C)、不同的类型(源文件,库文件)的文件。CodeWarrior通过“工程(Project)”来管理一个项目相关的所有文件。因此,在我们正确编译这个项目代码以前,首先要建立“工程”,并加入必要的源文件、库文件等。创建工程_选择File|New命令点击确定后,即可建立一个新的名为“ARM_Test”的工程。此时,会弹出ARM_Test.Mcp窗口添加文件ARM_Test.Mcp窗口包含三个标签页,在files标签下,可以通过单击右键添加已有的文件。例如,从目录中选取main.c文件(Myhelloworld\main.c),点击“打开”,main.c文件就被加入了工程中。用同样的方法,将所有的*.C和*.S源文件文件都添加到source中去(包括Target目录下的源文件)。所有必须的文件添加完成后如图所示。生成目标的设置每个工程项目都有3种生成目标:Debug包含了所有调试信息。DebugRel包含了部分调试信息。Release不包含调试信息。选择其中一种或多种作为最终生成的目标。此时工程已经建立完毕。但这样的工程还并不能正确地被编译,还需要对工程的编译选项进行适当配置。为了方便,以DebugRel模式为例。点击菜单[Edit|DebugRelSetting…],弹出配置对话框:首先选中TargetSetting,将其中的Post-linker设置为ARMfromELF,使得工程在链接后再通过fromELF产生二进制代码。然后选中ARMLinker,对链接器进行设置。参数设置_RO基地址:在调试时,-ro-base的设置应当大于0x0000。采用了0x8000这个地址。参数设置_设置入口点:Imageentrypoint制定映像文件的初始入口点地址值,当映像文件被夹在程序加载时,加载程序会跳转到该地址处执行。参数设置_指定起始输入段参数设置_指定可执行文件格式注意到在上图中新加入的文件前面有个红色的“钩”,说明这个文件还没有被编译过。在进行编译之前,必须正确设置该工程的工具配置选项。选中所有的文件,点击图标进行文件数据同步;然后点击图标,对文件进行编译(compile);点击按钮,对工程进行make,make的行为包括以下过程:编译和汇编源程序文件,产生*.o对象文件;链接对象文件和库产生可执行映像文件;产生二进制代码。Make结束后产生了可执行映象文件*.axf文件,这个文件可以载入AXD进行仿真调试了。并且还通过fromelf工具将ELF文件转换为二进制格式文件*.bin。它可以用来最终固化到flashROM中(但链接选项中的-ro-base要修改),也可以通过USB口下载运行。使用ARMulator来调试简单程序ARMulator是一个ARM指令集仿真器,集成在ARM的调试器AXD中,它提供对ARM处理器指令集的仿真,为ARM和Thumb提供精确的模拟。利用ARMulator可以在没有硬件目标平台条件下开发、运行特定ARM处理器上的应用程序。ARMulaor可以提供指令执行时内部寄存器状况及执行周期,可以进行应用程序的性能分析,这样就为软硬件并行开发提供了极大的方便。在CODEWARRIOR中,工程经过编译成功,产生了*.axf文件之后,就可以进行调试了。点击按钮,进入了AXD视窗界面。点击菜单项[Option|ConfigurTarget…],对调试目标进行配置:使用ARMulator来调试简单程序AXD调试环境_加载映像文件AXD调试环境_运行程序StepIn(或F8)或工具栏中图标Step(或F10)或工具栏中图标StepOut(或Shift+F8)或工具栏中图标RunToCursor(或F7)或工具栏中图标AXD调试环境_设置断点AXD调试环境_查看寄存器内容AXD调试环境_查看内存空间AXD调试环境_查看变量AXD调试环境_查看反汇编代码使用JTAG仿真器来调试程序使用AXD可以完成对程序的软件仿真调试,但要完成硬件仿真和调试功能,则需要通过JTAG仿真器实现ARM处理器与主机的通信联络。使用JTAG仿真器来调试程序初始化存储器通常ARM处理器都集成有SDRAM控制器。程序的在线调试实际上是要将程序代码通过JTAG仿真器下载到处理器的SDRAM空间执行,但是SDRAM在初始化上电时并不能直接访问,必须配置它的刷新计数值、刷新时间、刷新使能等才可以访问。初始化存储器就是设置ARM处理器的某些寄存器,实现对SDRAM存储空间映射的初始化过程。EELIOD系统硬件决定了在进行JTAG调试时,一上电SDRAM并没有初始化,故不能直接访问,下载程序前需要先进行SDRAM的初始化工作。初始化存储器程序仿真调试Semihosting调试技术Semihosting定义软件中断(SWI)指令SWI编号Semihosting调试技术Semihosting的实现原理C库函数重定向下面是实现fputc()重定向的一个例子:externvoidsendchar(char*ch);intfputc(intch,FILE*f){/*e.g.writeacharactertoanUART*/chartempch=ch;sendchar(&tempch);returnch;}程序的固化程序固化就是将调试完成后的程序代码烧写到非易失性存储介质中,常用介质包括ROM、EEPROM和FLASH等。程序的固化在程序固化开始前,需重新配置项目工程的ROBase和RWBase,使ROBase指向上电复位后的首地址0x0,RWBase指向256K片内RAM区首地址0x5C000000。将工程重新链接生成用于下载的8LED_SEG_c.bin文件。