实验一ADS开发环境实验.docx

上传人:b****1 文档编号:711370 上传时间:2022-10-12 格式:DOCX 页数:22 大小:854.50KB
下载 相关 举报
实验一ADS开发环境实验.docx_第1页
第1页 / 共22页
实验一ADS开发环境实验.docx_第2页
第2页 / 共22页
实验一ADS开发环境实验.docx_第3页
第3页 / 共22页
实验一ADS开发环境实验.docx_第4页
第4页 / 共22页
实验一ADS开发环境实验.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

实验一ADS开发环境实验.docx

《实验一ADS开发环境实验.docx》由会员分享,可在线阅读,更多相关《实验一ADS开发环境实验.docx(22页珍藏版)》请在冰豆网上搜索。

实验一ADS开发环境实验.docx

实验一ADS开发环境实验

实验一ADS开发环境实验

一、实验目的

1、掌握ADS开发环境的使用;

2、了解ADSModule工程基本结构和内容;

3、掌握在ADS下建立工程进行开发的基本技巧。

二、实验内容

1、熟悉ADS开发环境中的各个组件;

2、建立并编译一个HELLOWORLD工程;

三、实验设备

1、硬件:

DM2410C实验系统;

PC机;

2、软件:

PC机操作系统(WINDOWS2000);

ARMDeveloperSuitev1.2;

四、预备知识

1、了解ARM和S3C2410体系结构;

2、了解ARM和S3C2410汇编语言;

3、掌握C、C++语言。

4、已阅读过《DM2410实验系统使用说明》

五、基础知识

1、ADS简介

ADS是一个使用方便的集成开发环境,全称是“ARMDeveloperSuite”,它是由ARM公司提供的专门用于ARM相关应用开发和调试的综合性软件。

它在易用性上比上一代的SDT开发环境有较大提高,是一套功能强大又易于使用的开发环境,目前的版本号是1.2。

ADS囊括了一系列的应用,并有相关的文档和实例的支持。

使用者可以用它来编写和调试各种基于ARM家族RISC处理器的应用。

你可以使用ADS来编辑、编译、调试包括C、C++以及ARM汇编语言编写的程序。

ADS主要由以下部分构成:

􀂄ANSIC编译器-armccandtcc

􀂄ISO/EmbeddedC++编译器-armcppandtcpp

􀂄ARM/Thumb汇编器-armasm

􀂄Linker-armlink

􀂄Windows集成开发环境-CodeWarrior

􀂄Debugger-AXD

􀂄armsd可向前兼容

􀂄格式转换器-fromelf

􀂄库管理器-armar

􀂄CandC++库

􀂄指令级仿真器-ARMulator

􀂄同时包含

􀂄ARMFirmwareSuite

􀂄ARMApplicationLibrary

􀂄RealMonitor

图1-1ADS各组件之间的关系

在实验中我们接触最多,最直接的就是CodeWarrior和AXDDebugger这两个组件。

在本节实验中我们主要会讲解如何在CodeWarrior下建立工程,进行编译和连接,最终生成二进制文件。

下一节会着重介绍如何用AXDDebugger进行下载和调试仿真。

我们没有对其他组件进行详细介绍并不意味着其他模块没有发挥作用或者不重要,例如我们在编译生成二进制镜象的时就是ANSIC编译器-armccandtcc,ISO/EmbeddedC++编译器-armcppandtcpp,ARM/Thumb汇编器-armasm以及Linker–armlink这些组件在完成这项工作。

只是由于我们通过CodeWarrior环境进行操作可以在GUI界面下完成绝大部分工作,而不必直接和这些组件打交道,这是我们目前知道的在ARM下最方便最快捷的开发方式,关于其他组件的详细资料可以参见ADS下帮助文档或者直接访问ARM公司的网站。

图1-2CodeWarrior基本界面

六、实验说明

1、ADSModule工程基本结构

一个能够独立运行的工程中首先应该包括对硬件设备进初始化的代码,其次是一些辅助性代码,例如辅助调试代码,和工程应用性代码,为这些代码服务的头文件以及为整个工程相配套辅助文件,如编译控制文件和工程文件等。

在实验光盘\BSP目录下的ADSModule工程就是我们为这个实验系统定制的一个工程模板,实验系统ADS下的实验都是在ADSModule工程的基础上做相应的修改,添加应用部分实现的。

如果针对这个实验系统做二次开发,也可以在这个工程的基础上很方便的进行。

打开ADSModule文件夹,可以看到12个文件:

1

2410init.s

采用ARM汇编实现,包含了系统初始化部分中最开始的部分,也是最关键部分的代码,完成了对S3C2410Exception向量,中断向量表,内存,内存控制器和堆栈的初始化,同时又通过Main函数接口给调用后面的代码留出了接口。

2

2410slib.h

采用ARM汇编实现,主要完成了与MMU和CPSR相关的一系列辅助性函数。

3

2410slib.s

4

2410Main.c

C语言编写,完成功能。

5

2410lib.h

用C语言实现了串口调用函数,字符串处理函数,端口初始化函数,CPU主频调整函数,Watchdog控制函数等一系列辅助函数。

6

2410lib.c

7

2410addr.h

分别使用汇编和C实现,定义了S3C2410芯片的特殊寄存器地址以及特殊寄存器的相应设定值。

8

2410addr.inc

9

Memcfg.inc

根据实验系统的硬件,定义了每个BANK内存控制器相关的设定值,在2410init.s中被用来初始化内存控制器

10

Option.h

定义了一系列S3C2410可选择使用的主频,以及与之相配的寄存器设置参数,被用于2410init.s文件中设定S3C2410芯片主频

11

Option.inc

12

Def.h

13

reset.ini

14

Scat

ADS编译时控制编译器和连接器按照一定的内存结构进行。

2、关键代码分析:

2.1ExceptionVectors代码分析

ASSERT:

DEF:

ENDIAN_CHANGE

[ENDIAN_CHANGE

ASSERT:

DEF:

ENTRY_BUS_WIDTH

[ENTRY_BUS_WIDTH=32

bChangeBigEndian;DCD0xea000007

]

[ENTRY_BUS_WIDTH=16

andeqr14,r7,r0,lsl#20;DCD0x0007ea00

]

[ENTRY_BUS_WIDTH=8

streqr0,[r0,-r10,ror#1];DCD0x070000ea

]

|

bResetHandler

]

bHandlerUndef;handlerforUndefinedmode

bHandlerSWI;handlerforSWIinterrupt

bHandlerPabort;handlerforPAbort

bHandlerDabort;handlerforDAbort

b.;reserved

bHandlerIRQ;handlerforIRQinterrupt

bHandlerFIQ;handlerforFIQinterrupt

这段代码经过编译后将会被放在S3C2410芯片内部4K的BootSRAM开始处,也就是说这其实系统启动后会被最早调入内存和执行的代码,他完成了最关键的ExceptionVectors初始化。

ExceptionVectors

Address

Exception

ModeinEntry

0x00000000

Reset

Supervisor

0x00000004

Undefinedinstruction

Undefined

0x00000008

SoftwareInterrupt

Supervisor

0x0000000C

Abort(prefetch)

Abort

0x00000010

Abort(data)

Abort

0x00000014

Reserved

Reserved

0x00000018

IRQ

IRQ

0x0000001C

FIQ

FIQ

2.2中断跳转代码分析

IsrIRQ

subsp,sp,#4

stmfdsp!

{r8-r9}

ldrr9,=INTOFFSET;获得中断号

ldrr9,[r9]

ldrr8,=HandleEINT0;获得中断向量表基地址

addr8,r8,r9,lsl#2;计算偏移量

ldrr8,[r8]

strr8,[sp,#8]

ldmfdsp!

{r8-r9,pc};跳转进入中断处理函数

上面的代码通过INTOFFSET获得中断寄存器当中的中断号,然后通过HandleEINT0获得中断处理向量的基地址,根据中断号进行偏移,最终跳转到中断处理函数当中。

2.3scat文件分析

LDR10x00000000

{

ROM10x000000000x1000//将镜象的第一部分限制在4K长度,从0地址开

{//始,刚好和芯片内部的4KBootRAM印合

2410init.o(Init,+First)//限定这段内存当中只存放2410init.s编译形成的二进制代码

}

}

LDR20x30000000//镜象的第二部分从0x30000000开始,符合符合实验系统的硬件状况

{

RAM20x30000000

{

*(+RO)//将其他全部的ReadOnly和ReadWrite属性的代

*(+RW)//码放在这部分内存中0x30000000-0x30500000

}

RAM30x30500000

{

*(+ZI)//ZeroInit属性的代码存放在0x30500000开始位置的内存中

}

}

七、实验步骤

1、新建一个工程

Step1:

启动ADS

点击桌面→开始→程序→ARMDeveloperSuitev1.2→CodeWarriorforARMDeveloperSuite,弹出CodeWarriorforARMDeveloperSuite的界面。

图1-3从“程序”启动CodeWarrior

图1-4CodeWarrior启动界面

Step2:

建立新的工程

点击File→New,弹出新建工程对话框。

如图1-x新建工程后点击“确定”,进入工程编辑界面。

图1-5选择新建工程

图1-6新建工程对话框

注意:

在选择建立工程的文件夹时只需要指定到“D:

\ADS实验”即可,ADS将自动建立工程文件夹。

图1-7工程编辑界面

Step3:

拷贝工程相配套辅助文件

将“实验说明”中提到的“光盘目录\BSP\ADSmodel”文件夹下的12个文件拷贝到这个新建的文件夹中。

我们可以看到这时文件夹中除了这十二个文件以外还有一个HELLOWORLD.mcp工程项目文件和一个HELLOWORLD_Data文件夹,这个文件夹是用来保存编译好的二进制文件和编译临时文件。

再从光盘上ADSmodel的工程文件夹中将reset.ini和scat两个文件拷贝到这个工程文件夹下,其中scat就是上面讲到的编译控制文件,reset.ini是一段初始化代码,将在“JTAG下载和调试实验”一节中具体讲解它的用途。

Step4:

在项目中添加文件。

在CodeWarriorforARMDeveloperSuite的工程项目窗口中点击右键,选中“Addfiles…”,弹出文件选择框。

找到我们新建的工程文件夹,选中所有的*.C和*.S文件并确定。

图1-8向工程中添加文件

图1-9文件选择对话框

图1-10文件目标对话框

注意:

只要工程没有特殊要求,添加文件的时候应该选种全部的Target,

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1