嵌入式ARMADS集成开发环境.ppt

上传人:sccc 文档编号:6105962 上传时间:2023-09-24 格式:PPT 页数:31 大小:110.52KB
返回 下载 相关 举报
嵌入式ARMADS集成开发环境.ppt_第1页
第1页 / 共31页
嵌入式ARMADS集成开发环境.ppt_第2页
第2页 / 共31页
嵌入式ARMADS集成开发环境.ppt_第3页
第3页 / 共31页
嵌入式ARMADS集成开发环境.ppt_第4页
第4页 / 共31页
嵌入式ARMADS集成开发环境.ppt_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《嵌入式ARMADS集成开发环境.ppt》由会员分享,可在线阅读,更多相关《嵌入式ARMADS集成开发环境.ppt(31页珍藏版)》请在三一办公上搜索。

1、ARM ADS集成开发环境的使用,主要内容有:ADS 软件组成介绍 使用ADS 创建工程 用AXD 进行代码调试,运行时库类型和选项,ADS 提供以下的运行时库来支持被编译的C和C+代码:ANSI C库函数:这个C函数库是由以下几部分组成:在ISO C标准中定义的函数;在semihosted环境下(semihosting是针对ARM目标机的一种机制,它能够根据应用程序代码的输入/输出请求,与运行有调试功能的主机通讯。这种技术允许主机为通常没有输入和输出功能的目标硬件提供主机资源)用来实现C库函数的与目标相关的函数;被C和C+编译器所调用的支持函数。ARM C 库提供了额外的一些部件支持C+,并

2、为不同的结构体系和处理器编译代码。,C+库函数:C+库函数包含由ISO C+库标准定义的函数。C+库依赖于相应的C库实现与特定目标相关的部分,在C+库的内部本身是不包含与目标相关的部分。,ANSI C库使用标准的ARM semihosted 环境,提供例如,文件输入/输出的功能。Semihosting是由已定义的软件中断(Software Interrupt)操作来实现的。在大多数的情况下,semihosting SWI是被库函数内部的代码所触发,用于调试的代理程序处理SWI异常。调试代理程序为主机提供所需要的通信。Semihosted被ARMulator,Angel和Multi-ICE所支持

3、。用户可以使用在ADS软件中的ARM开发工具去开发用户应用程序,然后在ARMulator或在一个开发板上运行和调试该程序。,库路径结构,库路径是在ADS软件安装路径的lib目录下的两个子目录。假设,ADS软件安装在e:armadsv1_2目录,则在e:armadsv1_2lib目录下的两个子目录armlib和cpplib是ARM的库所在的路径。,Armlib:这个子目录包含了ARM C 库,浮点代数运算库,数学库等各类库函数。与这些库相应的头文件在e:armadsv1_2include目录中。Cpplib:这个子目录包含了Rogue Wave C+库和C+支持函数库。Rogue Wave C+

4、库和C+支持函数库合在一起被称为ARM C+库。与这些库相应的头文件安装在e:armadsv1_2include目录下。,环境变量ARMLIB必须被设置成指向库路径。另外一种指定ARM C和ARM C+库路径的方法是,在链接的时候使用操作选项-libpath directory(directory代表库所在的路径),来指明要装载的库的路径。无需对armlib和cpplib这两个库路径分开指明,链接器会自动从用户所指明的库路径中找出这两个子目录。,特别注意的以下几点:ARM C库函数是以二进制格式提供的;ARM 库函数禁止修改。通常情况下,为了创建依赖于目标的应用程序,在ANSI C库中只有很少

5、的几个函数需要实现重建。Rogue Wave Standard C+函数库的源代码不是免费发布的,可以从Rogue Wave Software Inc.,或ARM公司通过支付许可证费用来获得源文件。,GUI开发环境(Code Warrior和AXD),CodeWarrior集成开发环境 CodeWarrior for ARM是一套完整的集成开发工具,充分发挥了ARM RISC 的优势,使产品开发人员能够很好的应用尖端的片上系统技术.该工具是专为基于ARM RISC的处理器而设计的,它可加速并简化嵌入式开发过程中的每一个环节,使得开发人员只需通过一个集成软件开发环境就能研制出ARM产品,在整个开

6、发周期中,开发人员无需离开CodeWarrior开发环境,因此节省了在操做工具上花的时间,使得开发人员有更多的精力投入到代码编写上来,CodeWarrior集成开发环境(IDE)为管理和开发项目提供了简单多样化的图形用户界面。用户可以使用ADS的CodeWarrior IDE为ARM和Thumb处理器开发用C,C+,或ARM汇编语言的程序代码。通过提供下面的功能,CodeWarrior IDE缩短了用户开发项目代码的周期,CodeWarrior IDE 能够让用户将源代码文件,库文件还有其他相关的文件以及配置设置等放在一个工程中。每个工程可以创建和管理生成目标设置的多个配置。例如,要编译一个包

7、含调试信息的生成目标和一个基于ARM7TDMI的硬件优化生成目标,生成目标可以在同一个工程中共享文件,同时使用各自的设置。,2.ADS调试器,调试器本身是一个软件,用户通过这个软件使用debug agent可以对包含有调试信息的,正在运行的可执行代码进行比如变量的查看,断点的控制等调试操作。ADS中包含有3个调试器:AXD(ARM eXtended Debugger):ARM扩展调试器;armsd(ARM Symbolic Debugger):ARM符号调试器;,Debug target,在软件开发的最初阶段,可能还没有具体的硬件设备。如果要测试所开发的软件是否达到了预期的效果,这可以由软件仿

8、真来完成。即使调试器和要测试的软件运行在同一台PC上,也可以把目标当作一个独立的硬件来看待。当然,也可以搭建一个PCB板,这个板上可以包含一个或多个处理器,在这个板上可以运行和调试应用软件。只有当通过硬件或者是软件仿真所得到的结果达到了预期的效果,才算是完成了应用程序的编写工作。,调试器能够发送以下指令:装载映像文件到目标内存;启动或停止程序的执行;显示内存,寄存器或变量的值;允许用户改变存储的变量值。,Debug agent,Debug agent执行调试器发出的命令动作,比如:设置断点,从存储器中读数据,把数据写到存储器等。,实用程序,ADS提供以下的实用工具来配合前面介绍的命令行开发工具

9、的使用 fromELF 这是ARM映像文件转换工具。该命令将ELF格式的文件作为输入文件,将该格式转换为各种输出格式的文件,包括plain binary(BIN格式映像文件),Motorola 32-bit S-record format(Motorola 32位S格式映像文件),Intel Hex 32 format(Intel 32位格式映像文件),和 Verilog-like hex format(Verilog 16进制文件)。FromELF命令也能够为输入映像文件产生文本信息,例如代码和数据长度。,Armar ARM库函数生成器将一系列ELF格式的目标文件以库函数的形式集合在一起,用

10、户可以把一个库传递给一个链接器以代替几个ELF文件。Flash downloader 用于把二进制映像文件下载到ARM开发板上的Flash存储器的工具,ARMulator,这是一个ARM指令集仿真器,集成在ARM的调试器AXD中,它提供对ARM处理器的指令集的仿真,为ARM和Thumb提供精确的模拟。用户可以在硬件尚未做好的情况下,开发程序代码。,使用ADS创建工程,在CodeWarrior中新建一个工程的方法有两种,可以在工具栏中单击“New”按钮,也可以在“File”菜单中选择“New”菜单。这样就会打开一个如下图所示的对话框。,图1,在这个对话框中为用户提供了7种可选择的工程类型。ARM

11、 Executabl 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:用于由Th

12、umb指令创建一个可执行的ELF格式的映像文件;Thumb Object Library:用于由Thumb指令的代码生成一个armar格式的目标文件库。,在这里选择ARM Executable Image,在“Project name:”中输入工程文件名,本图例为“ledcircle”,点击“Location:”文本框的“Set”按钮,浏览选择想要将该工程保存的路径,将这些设置好后,点击“确定”,即可建立一个新的名为ledcircle的工程。这个时候会出现ledcircle.mcp的窗口,如下图2所示,有三个标签页,分别为files,link order,target。默认的是显示第一个标签页

13、files。通过在该标签页点击鼠标右键,选中“Add Files”可以把要用到的源程序添加到工程,图2,对于本例,由于所有的源文件都还没有建立,所以首先需要新建源文件。在“File”菜单中选择“New”,在打开的如图1所示的对话框中,选择标签页File,在File name中输入要创建的文件名,输入“Init.s”,点击“确定”关闭窗口。在打开的文件编辑框中输入下面的汇编代码:,;*;Chinese Academy of Sciences,Institute of Automation;File Name:Init.s;Description:;Author:;Date:;*IMPORTMai

14、nAREA Init,CODE,READONLYENTRYLDRR0,=0 x3FF0000 LDRR1,=0 xE7FFFF80;配置SYSCFG,片内4K Cache,4K SRAMSTRR1,R0 LDRSP,=0 x3FE1000;SP指向4K SRAM的尾地址,堆栈向下生成BLMainEND,在这段代码中,伪操作IMPORT告诉编译器符号Main不是在该文件中定义的,而是在其他源文件中定义的符号,但是本源文件中可能要用到该符号。接下来用伪指令AREA定义段名为Init的段为只读的代码段,伪指令ENTRY指出了程序的入口点。下面就是用汇编指令实现了配置SYSCFG特殊功能寄存器,将w9

15、0p710片内的8K一体化的SRAM配置为4K Cache,4K SRAM,并将用户堆栈设置在片内的SRAM中。4K SRAM的地址为0 x3FE,0000(0 x3FE,1000-1),由于w90p710的堆栈由高地址向低地址生成,将SP初始化为0 x3FE,1000。完成上述操作后,程序跳转到Main函数执行。保存Init.s汇编程序。,用同样的方法,再建立一个名为main.c的C源代码文件。具体代码内容如下:/*/Chinese Academy of Sciences,Institute of Automation/File Name:main.c Description:Author:

16、Date:/*#define IOPMOD(*(volatile unsigned*)0 x03FF5000)/IO port mode register#define IOPDATA(*(volatile unsigned*)0 x03FF5008)/IO port data registervoid Delay(unsigned int);int Main()unsigned long LED;IOPMOD=0 xFFFFFFFF;/将IO口置为输出模式IOPDATA=0 x01;for(;)LED=IOPDATA;LED=(LED1);IOPDATA=LED;Delay(10);if(!

17、(IOPDATA,该段代码首先将I/O模式寄存器设置为输出模式,为I/O数据寄存器赋初值为0 x1,通过将I/O数据寄存器的数值进行周期性的左移,实现使接在P0P3口的LED显示器轮流被点亮的功能。(注意这里的if语句,是为了保证当I/O数据寄存器中的数在移位过程中,第4位为数字“1”时,使数字1通过和0 xFF相与,又重新回到I/O数据寄存器的第0位,从而保证了数字1一直在I/O数据寄存器的低四位之间移位。),在这里还有一个细节,希望注意。在建立好一个工程时,默认的target是DebugRel,还有另外两个可用的target,分别为Realse和Debug,这三个target的含义分别为:

18、DebugRel:使用该目标,在生成目标的时候,会为每一个源文件生成调试信息;Debug:使用该目标为每一个源文件生成最完全的调试信息;Release:使用该目标不会生成任何调试信息。在本例中,使用默认的DebugRel目标。,现在已经新建了两个源文件,要把这两个源文件添加到工程中去。为工程添加源码常用的方法有两种,既可以使用入图2所示方法,也可以在“Project”菜单项中,选择“Add Files”,这两种方法都会打开文件浏览框,用户可以把已经存在的文件添加到工程中来。当选中要添加的文件时,会出现一个对话框,如图3所示,询问用户把文件添加到何类目标中,在这里,我们选择DebugRel目标。把刚才创建的两个文件添加到工程中来。,图3,到目前为止,一个完整的工程已经建立。下面该对工程进行编译和链接工作。,2 编译和链接工程,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号