实验一ADS开发环境实验.docx
- 文档编号:11150581
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:25
- 大小:854.46KB
实验一ADS开发环境实验.docx
《实验一ADS开发环境实验.docx》由会员分享,可在线阅读,更多相关《实验一ADS开发环境实验.docx(25页珍藏版)》请在冰豆网上搜索。
实验一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,这样才能保证文件被包含在所有的工程模式下,从而保证整个工程能够被成功编译。
图1-11添加文件后的工程
注意:
*.h和*.inc文件不用直接添加,CodeWarrior会自动在设定的目录下寻找它们,并在编译的时候包含它们。
这样一个工程项目的基本框架就建成了。
但是这个项目没有任何功能,我们要给它添加可以完成的功能。
Step5:
在项目中新建HELLOWORLDE.c
选择File→New新建一个文件HELLOWORLDE.c,并选中Addtoproject,如图:
图1-12新建一个文件并加入工程
图1-13添加HELLOWORLDE.c文件后的工程
Step6:
在HELLOWORLDE.c文件中添加代码。
双击打开这个文件,可以加入自己的代码。
我们在这里创建一个文件在串口终端上打印欢迎信息。
(有关串口终端等概念将在《实验二JTAG下载和调试实验》中讲到)
//=========================
//名称:
HELLOWORLDE
//功能:
打印“HELLOWORLDE”字符串
//=========================
voidHELLOWORLDE(void)
{
Uart_Printf("HELLOWORLDE!
!
");//在串口终端打印字符串
}
图1-14添加代码后的HELLOWORLDE.c文件
如果不知道Uart_Printf()函数的用法和功能可以选中这个函数并点击右键,在菜单中选择Gotofunctiong……一项,跳转至2410lib.c中对这个函数的定义加以参考。
这是ADS修改程序的一种方法。
这里需要提到的是,相对与SDT来说ADS增加了很多程序修改编译的功能,但是仍有不尽人意的地方,创建和修改程序进行建议使用SourceInsight等工具软件。
Step7:
添加调用代码
在2410Main.c中的Main()函数的结尾处添加一行对HELLOWORLD函数的调用代码。
到现在我们的整个工程的代码才算完整。
图1-15修改后的Main函数
图1-16工程管理对话框
按钮1:
编译链接按钮
按钮2:
工程设置按钮
按钮3:
编译选择按钮
Step8:
设置新工程。
点击工程管理对话框中2按钮打开设置窗口,进行如下设置:
图1-17Target设置
图1-18ARM汇编语言设置
图1-19ARMC语言设置
图1-20ARMC++语言设置
图1-21ThumbC语言设置
图1-22ThumbC++语言设置
图1-23链接器设置
注意:
上图中的scat.scf文件就是前面复制到工程目录下的scat文件。
当选中后可以将其改为相对地址下的scat.scf,如图1-23,这样工程不论程序拷贝到任何地方都可以被自动链接。
Step9:
编译连接工程。
点击工程管理对话框中的编译链接按钮。
工程管理对话框中的按钮3是编译选择按钮,也可以直接点击下面窗口中文件名前面的部分,设置文件需要被重新编译和链接。
如果工程中的文件被修改过,即使是它所包含的头文件被修改了,CodeWarrior会自动设置该文件需要重新被编译链接。
图1-24选择文件编译
图1-25编译结果对话框
其中左上角标号为1的圆内表示程序中的错误数,必须错误数为0才可以正确编译。
标号为2的圆内表示警告,提示程序中可能存在的错误或不合理的问题。
标号为3的圆内的窗口列出了具体错误的位置、类型和错误的可能原因,同时列出了项目的一些数据。
单击窗口中报错的条目,会在下面标号为5的圆内的窗口中显示出错误所在的位置。
我们看到是报错语句前一句没有表示结束的分号。
将其修改并保存,重新编译直至没有错误为止。
这样我们完成了编译一个已有工程项目的任务。
打开我们事先建立的“D:
\ADS实验\HELLOWORLD”目录,可以看到添加了一个“HELLOWORDLE_Data”文件夹,其中的DebugRel子文件夹内的HELLOWORDLE.axf就是我们生成的二进制可执行文件。
将在“JTAG下载和调试实验”一节中讲解如何下载调试这一文件。
2、打开已有工程
Step1:
将需要使用的工程文件夹拷贝到本地硬盘。
正如前面看到的在编译工程时会在工程所在文件夹下新建一个文件夹用来存放编译生成可执行文件和编译过程中形成的中间文件,所以不能在光盘等ROM存储媒体上编译工程。
在做实验的时候需要将光盘上的实验工程复制到硬盘上,例如本实验应将光盘“\ADS实验指导\ADS开发环境实验\HELLOWORLD”目录拷贝到本地硬盘上,我们假设拷贝到“D:
\ADS实验”目录中,以后的所有实验都假设这么操作。
Step2:
用CodeWarriorforARMDeveloperSuite打开本地硬盘上的实验工程。
我们这里打开新建的HELLOWORLD文件夹中的HELLOWORD.mcp(或者是从附录光盘中拷贝过来的“D:
\ADS实验\ADS开发环境实验\HELLOWORD.mcp,其内容与我们新建的工程完全相同)。
图1-26CodeWarrior下Open…操作
图1-27工程文件选择对话框
这样我们就可以修改和编译了。
本节实验是ADS实验的基础,应该认真熟悉其中的内容,熟练掌握操作步骤,为后续实验打下坚实的基础。
本节中有些内容可能还一时无法完全理解,在后面的实验中会逐步加强认识。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 ADS 开发 环境