实验一ADS开发环境实验Word文档格式.docx
《实验一ADS开发环境实验Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验一ADS开发环境实验Word文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
![实验一ADS开发环境实验Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-10/9/d3dd536a-f55b-4a4a-b215-c9af7d4c35b9/d3dd536a-f55b-4a4a-b215-c9af7d4c35b91.gif)
五、基础知识
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:
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
0x0000000C
Abort(prefetch)
Abort
0x00000010
Abort(data)
0x00000014
Reserved
0x00000018
IRQ
0x0000001C
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,