实验一ADS开发环境实验_第1页
实验一ADS开发环境实验_第2页
实验一ADS开发环境实验_第3页
实验一ADS开发环境实验_第4页
实验一ADS开发环境实验_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一 ADS开发环境实验一、实验目的1、掌握ADS开发环境的使用;2、了解ADSModule工程基本结构和内容;3、掌握在ADS下建立工程进行开发的基本技巧。二、实验内容1、熟悉ADS开发环境中的各个组件;2、建立并编译一个HELLOWORLD工程;三、实验设备1、硬件:DM2410C实验系统;PC机;2、软件:PC机操作系统(WINDOWS 2000);ARM Developer Suite v1.2;四、预备知识1、了解ARM和S3C2410体系结构;2、了解ARM和S3C2410汇编语言;3、掌握C、C+语言。4、已阅读过DM2410实验系统使用说明五、基础知识1、ADS简介ADS是一个使用方便的集成开发环境,全称是“ARM Developer Suite”,它是由ARM公司提供的专门用于ARM相关应用开发和调试的综合性软件。它在易用性上比上一代的SDT开发环境有较大提高,是一套功能强大又易于使用的开发环境,目前的版本号是1.2。ADS囊括了一系列的应用,并有相关的文档和实例的支持。使用者可以用它来编写和调试各种基于ARM家族RISC处理器的应用。你可以使用ADS来编辑、编译、调试包括C、C+以及ARM汇编语言编写的程序。ADS主要由以下部分构成:ANSI C 编译器-armccand tccISO / Embedded C+ 编译器-armcppand tcppARM / Thumb 汇编器-armasmLinker -armlinkWindows 集成开发环境-CodeWarriorDebugger -AXDarmsd 可向前兼容格式转换器-fromelf库管理器-armarC and C+ 库指令级仿真器-ARMulator同时包含ARM Firmware SuiteARM Application LibraryRealMonitor图1-1 ADS各组件之间的关系在实验中我们接触最多,最直接的就是CodeWarrior和AXD Debugger这两个组件。在本节实验中我们主要会讲解如何在CodeWarrior 下建立工程,进行编译和连接,最终生成二进制文件。下一节会着重介绍如何用AXD Debugger进行下载和调试仿真。我们没有对其他组件进行详细介绍并不意味着其他模块没有发挥作用或者不重要,例如我们在编译生成二进制镜象的时就是ANSI C 编译器-armccand tcc,ISO / Embedded C+ 编译器-armcppand tcpp,ARM / Thumb 汇编器-armasm以及Linker armlink这些组件在完成这项工作。只是由于我们通过CodeWarrior环境进行操作可以在GUI界面下完成绝大部分工作,而不必直接和这些组件打交道,这是我们目前知道的在ARM下最方便最快捷的开发方式,关于其他组件的详细资料可以参见ADS下帮助文档或者直接访问ARM公司的网站。图1-2 CodeWarrior基本界面六、实验说明1、ADSModule工程基本结构一个能够独立运行的工程中首先应该包括对硬件设备进初始化的代码,其次是一些辅助性代码,例如辅助调试代码,和工程应用性代码,为这些代码服务的头文件以及为整个工程相配套辅助文件,如编译控制文件和工程文件等。在实验光盘BSP目录下的ADSModule工程就是我们为这个实验系统定制的一个工程模板,实验系统ADS下的实验都是在ADSModule工程的基础上做相应的修改,添加应用部分实现的。如果针对这个实验系统做二次开发,也可以在这个工程的基础上很方便的进行。打开ADSModule文件夹,可以看到12个文件:12410init.s采用ARM汇编实现,包含了系统初始化部分中最开始的部分,也是最关键部分的代码,完成了对S3C2410 Exception向量,中断向量表,内存,内存控制器和堆栈的初始化,同时又通过Main函数接口给调用后面的代码留出了接口。22410slib.h采用ARM汇编实现,主要完成了与MMU和CPSR相关的一系列辅助性函数。32410slib.s42410Main.cC语言编写,完成功能。52410lib.h用C语言实现了串口调用函数,字符串处理函数,端口初始化函数,CPU主频调整函数,Watchdog控制函数等一系列辅助函数。62410lib.c72410addr.h分别使用汇编和C实现,定义了S3C2410芯片的特殊寄存器地址以及特殊寄存器的相应设定值。82410addr.inc9Memcfg.inc根据实验系统的硬件,定义了每个BANK内存控制器相关的设定值,在2410init.s中被用来初始化内存控制器10Option.h定义了一系列S3C2410可选择使用的主频,以及与之相配的寄存器设置参数,被用于2410init.s文件中设定S3C2410芯片主频11Option.inc12Def.h13reset.ini14ScatADS编译时控制编译器和连接器按照一定的内存结构进行。2、关键代码分析:2.1 Exception Vectors代码分析 ASSERT :DEF:ENDIAN_CHANGE ENDIAN_CHANGE ASSERT :DEF:ENTRY_BUS_WIDTH ENTRY_BUS_WIDTH=32 b ChangeBigEndian ;DCD 0xea ENTRY_BUS_WIDTH=16 andeq r14,r7,r0,lsl #20 ;DCD 0x0007ea00 ENTRY_BUS_WIDTH=8 streq r0,r0,-r10,ror #1 ;DCD 0xea | b ResetHandler b HandlerUndef ;handler for Undefined mode b HandlerSWI ;handler for SWI interrupt b HandlerPabort ;handler for PAbort b HandlerDabort ;handler for DAbort b . ;reserved b HandlerIRQ ;handler for IRQ interrupt b HandlerFIQ ;handler for FIQ interrupt这段代码经过编译后将会被放在S3C2410芯片内部4K的BootSRAM开始处,也就是说这其实系统启动后会被最早调入内存和执行的代码,他完成了最关键的Exception Vectors初始化。Exception VectorsAddressExceptionMode in Entry0xResetSupervisor0xUndefined instructionUndefined0x Software InterruptSupervisor0xCAbort(prefetch)Abort0xAbort (data)Abort0x ReservedReserved0x IRQIRQ0xCFIQFIQ2.2 中断跳转代码分析IsrIRQ sub sp,sp,#4 stmfd sp!,r8-r9 ldr r9,=INTOFFSET; 获得中断号 ldr r9,r9 ldr r8,=HandleEINT0;获得中断向量表基地址 add r8,r8,r9,lsl #2 ;计算偏移量 ldr r8,r8 str r8,sp,#8 ldmfd sp!,r8-r9,pc; 跳转进入中断处理函数上面的代码通过INTOFFSET获得中断寄存器当中的中断号,然后通过HandleEINT0获得中断处理向量的基地址,根据中断号进行偏移,最终跳转到中断处理函数当中。2.3 scat文件分析LDR1 0x ROM1 0x 0x1000/ 将镜象的第一部分限制在4K长度,从0地址开 / 始,刚好和芯片内部的4K BootRAM印合 2410init.o (Init, +First)/ 限定这段内存当中只存放2410init.s编译形成的二进制代码 LDR2 0x/ 镜象的第二部分从0x开始,符合符合实验系统的硬件状况 RAM2 0x * (+RO) / 将其他全部的ReadOnly和ReadWrite属性的代* (+RW)/ 码放在这部分内存中0x-0x RAM3 0x * (+ZI)/ Zero Init属性的代码存放在0x开始位置的内存中 七、实验步骤1、新建一个工程Step1: 启动ADS点击桌面开始程序ARM Developer Suite v1.2 CodeWarrior for ARM Developer Suite,弹出CodeWarrior for ARM Developer Suite的界面。图1-3 从“程序”启动CodeWarrior图1-4 CodeWarrior启动界面Step2: 建立新的工程点击FileNew,弹出新建工程对话框。如图1-x新建工程后点击“确定”, 进入工程编辑界面。图1-5 选择新建工程图1-6 新建工程对话框注意:在选择建立工程的文件夹时只需要指定到“D:ADS实验”即可,ADS将自动建立工程文件夹。图1-7 工程编辑界面Step3: 拷贝工程相配套辅助文件将“实验说明”中提到的“光盘目录BSPADSmodel”文件夹下的12个文件拷贝到这个新建的文件夹中。我们可以看到这时文件夹中除了这十二个文件以外还有一个HELLOWORLD.mcp工程项目文件和一个HELLOWORLD_Data文件夹,这个文件夹是用来保存编译好的二进制文件和编译临时文件。再从光盘上ADSmodel的工程文件夹中将reset.ini和scat两个文件拷贝到这个工程文件夹下,其中scat就是上面讲到的编译控制文件,reset.ini是一段初始化代码,将在“JTAG下载和调试实验”一节中具体讲解它的用途。Step4: 在项目中添加文件。在CodeWarrior for ARM Developer Suite的工程项目窗口中点击右键,选中“Add files ”,弹出文件选择框。找到我们新建的工程文件夹,选中所有的*.C和*.S文件并确定。图1-8 向工程中添加文件图1-9 文件选择对话框图1-10 文件目标对话框注意:只要工程没有特殊要求,添加文件的时候应该选种全部的Target,这样才能保证文件被包含在所有的工程模式下,从而保证整个工程能够被成功编译。图1-11 添加文件后的工程注意:*.h和*.inc文件不用直接添加,CodeWarrior会自动在设定的目录下寻找它们,并在编译的时候包含它们。这样一个工程项目的基本框架就建成了。但是这个项目没有任何功能,我们要给它添加可以完成的功能。Step5: 在项目中新建HELLOWORLDE.c选择FileNew新建一个文件HELLOWORLDE.c,并选中Add to project,如图:图1-12 新建一个文件并加入工程图1-13 添加HELLOWORLDE.c文件后的工程Step6: 在HELLOWORLDE.c文件中添加代码。双击打开这个文件,可以加入自己的代码。我们在这里创建一个文件在串口终端上打印欢迎信息。(有关串口终端等概念将在实验二 JTAG下载和调试实验中讲到)/=/名称:HELLOWORLDE/功能:打印“HELLOWORLDE”字符串/=void HELLOWORLDE(void) Uart_Printf(HELLOWORLDE!);/在串口终端打印字符串图1-14 添加代码后的HELLOWORLDE.c文件如果不知道Uart_Printf()函数的用法和功能可以选中这个函数并点击右键,在菜单中选择Go to functiong 一项,跳转至2410lib.c中对这个函数的定义加以参考。这是ADS修改程序的一种方法。这里需要提到的是,相对与SDT来说ADS增加了很多程序修改编译的功能,但是仍有不尽人意的地方,创建和修改程序进行建议使用Source Insight等工具软件。Step7: 添加调用代码在2410Main.c中的Main()函数的结尾处添加一行对HELLOWORLD函数的调用代码。到现在我们的整个工程的代码才算完整。图1-15 修改后的Main函数图1-16 工程管理对话框按钮1:编译链接按钮按钮2:工程设置按钮按钮3:编译选择按钮Step8: 设置新工程。点击 工程管理对话框 中2按钮打开设置窗口,进行如下设置:图1-17 Target设置图1-18 ARM 汇编语言设置图1-19 ARM C语言设置图1-20 ARM C+语言设置图1-21 Thumb C语言设置图1-22 Thumb C+语言设置图1-23 链接器设置注意:上图中的scat.scf文件就是前面复制到工程目录下的scat文件。当选中后可以将其改为相对地址下的scat.scf,如图1-23,这样工程不论程序拷贝到任何地方都可以被自动链接。Step9:编译连接工程。点击工程管理对话框中的编译链接按钮。工程管理对话框中的按钮3是编译选择按钮,也可以直接点击下面窗口中文件名前面的部分,设置文件需要被重新编译和链接。如果工程中的文件被修改过,即使是它所包含的头文件被修改了,CodeWarrior会自动设置该文件需要重新被编译链接。图1-24 选择文件编译图1-25 编译结果对话框其中左上角标号为1的圆内表示程序中的错误数,必须错误数为0才可以正确编译。标号为2的圆内表示警告,提示程序中可能存在的错误或不合理的问题。标号为3的圆内的窗口列出了具体错误的位置、类型和错误的可能原因,同时列出了项目的一些数据。单击窗口中报错的条目,会在下面标号为5的圆内的窗口中显示出错误所在的位置。我们看到是报错语句前一句没有表示结束的分号。将其修改并保存,重新编译直至没有错误为止。这样我们完成了编译一个已有工程项目的任务。打开我们事先建立的“D:ADS实验H

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论