《最新嵌入式ARMADS集成开发环境PPT课件.ppt》由会员分享,可在线阅读,更多相关《最新嵌入式ARMADS集成开发环境PPT课件.ppt(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、嵌入式嵌入式ARMADSARMADS集成开发环集成开发环境境1运行时库类型和选项运行时库类型和选项lADS 提供以下的运行时库来支持被编译的C和C+代码:lANSI C库函数:l这个C函数库是由以下几部分组成:l在ISO C标准中定义的函数;l在semihosted环境下(semihosting是针对ARM目标机的一种机制,它能够根据应用程序代码的输入/输出请求,与运行有调试功能的主机通讯。这种技术允许主机为通常没有输入和输出功能的目标硬件提供主机资源)用来实现C库函数的与目标相关的函数;l被C和C+编译器所调用的支持函数。lARM C 库提供了额外的一些部件支持C+,并为不同的结构体系和处理
2、器编译代码。GUI开发环境(Code Warrior和AXD)1.CodeWarrior集成开发环境集成开发环境 CodeWarrior for ARM是一套完整的集成开发工具,充分发挥了ARM RISC 的优势,使产品开发人员能够很好的应用尖端的片上系统技术.该工具是专为基于ARM RISC的处理器而设计的,它可加速并简化嵌入式开发过程中的每一个环节,使得开发人员只需通过一个集成软件开发环境就能研制出ARM产品,在整个开发周期中,开发人员无需离开CodeWarrior开发环境,因此节省了在操做工具上花的时间,使得开发人员有更多的精力投入到代码编写上来 CodeWarrior集成开发环境(ID
3、E)为管理和开发项目提供了简单多样化的图形用户界面。用户可以使用ADS的CodeWarrior IDE为ARM和Thumb处理器开发用C,C+,或ARM汇编语言的程序代码。通过提供下面的功能,CodeWarrior IDE缩短了用户开发项目代码的周期 CodeWarrior IDE 能够让用户将源代码文件,源代码文件,库文件还有其他相关的文件以及配置设置库文件还有其他相关的文件以及配置设置等放在一个工程中等放在一个工程中。每个工程可以创建和管理生成目标设置的多个配置。例如,要编译一个包含调试信息的生成目标和一个基于ARM7TDMI的硬件优化生成目标,生成目标可以在同一个工程中共享文件,同时使用
4、各自的设置。2.ADS调试器调试器调试器本身是一个软件,用户通过这个软件使用debug agent可以对包含有调试信息的,正在运行的可执行代码进行比如变量的查看,断点的控制等调试操作。ADS中包含有3个调试器:AXD(ARM eXtended Debugger):ARM扩展调试器;armsd(ARM Symbolic Debugger):ARM符号调试器;Debugtarget在软件开发的最初阶段,可能还没有具体的硬件设备。如果要测试所开发的软件是否达到了预期的效果,这可以由软件仿真来完成。即使调试器和要测试的软件运行在同一台PC上,也可以把目标当作一个独立的硬件来看待。当然,也可以搭建一个P
5、CB板,这个板上可以包含一个或多个处理器,在这个板上可以运行和调试应用软件。只有当通过硬件或者是软件仿真所得到的结果达到了预期的效果,才算是完成了应用程序的编写工作。调试器能够发送以下指令调试器能够发送以下指令:装载映像文件到目标内存;启动或停止程序的执行;显示内存,寄存器或变量的值;允许用户改变存储的变量值。Debug agentDebug agent执行调试器发出的命令动作,比如:设置断点,从存储器中读数据,把数据写到存储器等。实用程序 ADS提供以下的实用工具来配合前面介绍的命令行开发工具的使用 fromELF这是这是ARM映像文件转换工具映像文件转换工具。该命令将ELF格式的文件作为输
6、入文件,将该格式转换为各种输出格式的文件,包括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命令也能够为输入映像文件产生文本信息,例如代码和数据长度。ArmarARM库函数生成器将一系列ELF格式的目标文件以库函数的形式集合在一起,用户可以把一个库传递给一个链接器以代替几个ELF文件。Flashdownloader用于
7、把二进制映像文件下载到ARM开发板上的Flash存储器的工具 ARMulator这是一个ARM指令集仿真器,集成在ARM的调试器AXD中,它提供对ARM处理器的指令集的仿真,为ARM和Thumb提供精确的模拟。用户可以在硬件尚未做好的情况下,开发程序代码。使用ADS创建工程 在CodeWarrior中新建一个工程的方法有两种,可以在工具栏中单击“New”按钮,也可以在“File”菜单中选择“New”菜单。这样就会打开一个如下图所示的对话框。图1在这个对话框中为用户提供了7种可选择的工程类型。lARM Executabl Image:用于由ARM指令的代码生成一个ELF格式的可执行映像文件;lA
8、RM Object Library:用于由ARM指令的代码生成一个armar格式的目标文件库;lEmpty Project:用于创建一个不包含任何库或源文件的工程;lMakefile Importer Wizard:用于将Visual C的nmake或GNU make文件转入到CodeWarrior IDE 工程文件;lThumb ARM Executable Image:用于由ARM指令和Thumb指令的混和代码生成一个可执行的ELF格式的映像文件;lThumb Executable image:用于由Thumb指令创建一个可执行的ELF格式的映像文件;lThumb Object Libra
9、ry:用于由Thumb指令的代码生成一个armar格式的目标文件库。在这里选择ARM Executable Image,在“Project name:”中输入工程文件名,本图例为“ledcircle”,点击“Location:”文本框的“Set”按钮,浏览选择想要将该工程保存的路径,将这些设置好后,点击“确定”,即可建立一个新的名为ledcircle的工程。这个时候会出现ledcircle.mcp的窗口,如下图2所示,有三个标签页,分别为files,link order,target。默认的是显示第一个标签页files。通过在该标签页点击鼠标右键,选中“Add Files”可以把要用到的源程序
10、添加到工程 图2对于本例,由于所有的源文件都还没有建立,所以首先需要新建源文件。在“File”菜单中选择“New”,在打开的如图1所示的对话框中,选择标签页File,在File name中输入要创建的文件名,输入“Init.s”,点击“确定”关闭窗口。在打开的文件编辑框中输入下面的汇编代码:;*;Chinese Academy of Sciences,Institute of Automation;File Name:Init.s;Description:;Author:;Date:;*IMPORTMainAREA Init,CODE,READONLYENTRYLDRR0,=0 x3FF000
11、0 LDRR1,=0 xE7FFFF80 ;配置SYSCFG,片内4K Cache,4K SRAMSTRR1,R0 LDRSP,=0 x3FE1000 ;SP指向4K SRAM的尾地址,堆栈向下生成BLMainEND在这段代码中,伪操作IMPORT告诉编译器符号Main不是在该文件中定义的,而是在其他源文件中定义的符号,但是本源文件中可能要用到该符号。接下来用伪指令AREA定义段名为Init的段为只读的代码段,伪指令ENTRY指出了程序的入口点。下面就是用汇编指令实现了配置SYSCFG特殊功能寄存器,将w90p710片内的8K一体化的SRAM配置为4K Cache,4K SRAM,并将用户堆栈
12、设置在片内的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:Date:/*#define IOPMOD (*(volatile unsigned*)0
13、 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(!(IOPDATA&0 x0F)IOPDATA=0 x01;return(0);void
14、 Delay(unsigned int x)unsigned int i,j,k;for(i=0;i=x;i+)for(j=0;j0 xff;j+)for(k=0;k0 xff;k+);该段代码首先将I/O模式寄存器设置为输出模式,为I/O数据寄存器赋初值为0 x1,通过将I/O数据寄存器的数值进行周期性的左移,实现使接在P0P3口的LED显示器轮流被点亮的功能。(注意这里的if语句,是为了保证当I/O数据寄存器中的数在移位过程中,第4位为数字“1”时,使数字1通过和0 xFF相与,又重新回到I/O数据寄存器的第0位,从而保证了数字1一直在I/O数据寄存器的低四位之间移位。)在这里还有一个细节
15、,希望注意。在建立好一个工程时,默认的target是DebugRel,还有另外两个可用的target,分别为Realse和Debug,这三个target的含义分别为:DebugRel:使用该目标,在生成目标的时候,会为每一个源文件生成调试信息;Debug:使用该目标为每一个源文件生成最完全的调试信息;Release:使用该目标不会生成任何调试信息。在本例中,使用默认的DebugRel目标。现在已经新建了两个源文件,要把这两个源文件添加到工程中去。为工程添加源码常用的方法有两种,既可以使用入图2所示方法,也可以在“Project”菜单项中,选择“Add Files”,这两种方法都会打开文件浏览框,用户可以把已经存在的文件添加到工程中来。当选中要添加的文件时,会出现一个对话框,如图3所示,询问用户把文件添加到何类目标中,在这里,我们选择DebugRel目标。把刚才创建的两个文件添加到工程中来。图3到目前为止,一个完整的工程已经建立。下面该对工程进行编译和链接工作。2 编译和链接工程 结束语结束语谢谢大家聆听!谢谢大家聆听!32