嵌入式实验教案(8学时)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一ADS 1.2集成开发环境练习

【实验目的】

了解ADS 1.2集成开发环境和ARMulator软件仿真的使用方法;掌握ARM7TDMI汇编指令的用法,并能编写简单的汇编程序;掌握指令的条件执行和使用LDR/STR指令完成存储器的访问。

【实验设备】

PC机一台,ADS 1.2集成开发环境

【实验内容】

建立一个工程;建立一个C源文件,并添加到工程中;设置文本编辑器支持中文;设置编译连接控制选项;编译连接工程;调试工程;编程实现:使用LDR指令读取0x40003100上的数据,将数据加1,若结果小于10则使用STR指令把结果写回原地址,否则把0写回原地址,不断重复整个过程;使用ADS 1.2软件仿真,单步、全速运行程序,设置断点,打开寄存器窗口(Processor Registers)监视R0、R1的值,打开存储器观察窗口(Memory)监视0x40003100的值。

【实验步骤】

(1)启动ADS 1.2 IDE集成开发环境,选择File->New,使用ARM Executable Image 工程模板建立一个工程,工程名称为ADS(见图1.1)。

图1.1 建立ARM指令代码的工程

(2)选择File->New建立一个新文件TEST1.S,设置直接添加到项目中(见图1.2)。编程实现:使用LDR指令读取0x40003100上的数据,将数据加1,若结果小于10则使用

STR指令把结果写回原地址,否则把0写回原地址,不断重复整个过程,参考程序清单1,输入程序清单1.1所示的代码并保存(见图1.3)。

图1.2 新建文件TEST1.S

图1.3 添加了TEST1.S的工程管理窗口

程序清单1 TEST1.S文件代码

COUNT EQU 0x40003100 ;定义一个变量,地址为0x40003100

AREA Example1,CODE,READONLY ;声明代码段Example1

ENTRY ;标识程序入口

CODE32 ;声明32位ARM指令

START LDR R1,=COUNT ;R1指向地址0x40003100

MOV R0,#0

STR R0,[R1] ;[R1]<=R0,即设置地址0x40003100的值为0

LOOP LDR R1,=COUNT

LDR R0,[R1] ;R0<=[R1]

ADD R0,R0,#1

CMP R0,#10 ;R0与10比较,影响条件码标志

MOVHS R0,#0 ;若R0大于等于10,则此指令执行,R0<=0

STR R0,[R1] ;[R1]<=R0

B LOOP

END

(3)由于ADS安装以后默认的字体是Courier New,对于中文支持不完善,因此建议修改字体。选择Edit->Preferences...,打开IDE Preferences对话框(见图1.4),在Font(字体)选择设置字体为Fixedsys,Script为CHINESE_GB2312。由于Tab在不同文本编辑器解释不同,建议在Tab Inserts Spaces前打勾,使Tab键插入的是多个空格。

图1.4 字体和Tab设置

(4)选择Edit->DebugRel Settings...,在DebugRel Settings对话框的左边选择ARM Linker项,然后在Output页设置工程连接地址RO Base为0x40000000,RW Base为0x40003000(见图1.5),在Options页设置调试入口地址Image entry point为0x40000000(见图1.6)。

图1.5 工程连接地址设置

图1.6 工程调试入口地址设置

(5)选择Project->Make,将编译连接整个工程。如果编译成功,弹出的Errors & Warnings 对话框(见图1.7)会报告编译错误为0,那么就可以对工程进行仿真。

图1.7 编译错误和警告提示框

(6)选择Project->Debug,或者按下快捷键F5,IDE环境就会启动AXD调试软件。选择Option->Configure Target…,弹出Choose Target对话框(见图1.8),选择ARMUL软件仿真,然后确定。选择File->Load Image,选择打开axf文件(见图1.9),可以开始调试了。AXD调试界面如图1.10所示。

图1.8 选择软件仿真

图1.9 加载镜像文件

图1.10 AXD调试界面

(7)选择Processor Views->Registers打开寄存器窗口监视R0、R1的值。Processor Views->Memory打开存储器观察窗口设置观察地址为0x40003100,显示方式Size为32Bit,监视0x40003100地址上的值。说明:在Memory窗口中点击鼠标右键,在Size项中可以选择显示格式。

(8)选择Execute下拉菜单可以单步运行程序,设置/取消断点,全速运行程序,或者停止程序运行等,调试时观察寄存器和0x40003100地址上的值,运行结果见图1.11。

图1.11 程序运行结果

【思考】

(1)如何强行重新编译工程的所有文件?

(2)使用LDRB/STRB代替程序清单1中的所有加载/存储指令LDR/STR,程序会得到正确的执行吗?

(3)LDR伪指令与LDR加载指令的功能和应用有何区别,举例说明。

(4)LDR/STR指令的前索引偏移指令如何编写?指令是怎样操作的?

(5)在AXD调试时如何复位程序?

实验二C程序实验(选做)

【实验目的】

了解使用ADS 1.2编写和调试C程序的方法。

【实验设备】

PC机一台,ADS 1.2集成开发环境

【实验内容】

编写一个汇编程序文件和一个C程序文件。汇编程序的功能是初始化堆栈指针和C程序的运行环境,然后跳转到C程序执行,这就是一个简单的启动程序。C程序使用加法运算来计算1+2+3+...+N的值(N>0)。

【实验步骤】

(1)启动ADS 1.2 IDE集成开发环境,选择File->New,使用ARM Executable Image 工程模板建立一个工程PorgramC。

(2)选择File->New建立一个汇编程序文件Startup.S和一个C程序文件Test2.c,然后添加到项目中,参考程序见程序清单2.1和2.2,输入程序代码并保存。

程序清单2.1 Test2.c参考程序

#define uint8 unsigned char

#define uint32 unsigned int

#define N 100

uint32 sum; //使用加法运算来计算1+2+3+...+N的值。(N>0)

void Main(void)

{ uint32 i;

sum=0;

for(i=0; i<=N; i++)

{ sum+=i;}

while(1);

}

程序清单2.2 Startup.S文件代码

IMPORT |Image$$RO$$Limit|

IMPORT |Image$$RW$$Base|

IMPORT |Image$$ZI$$Base|

IMPORT |Image$$ZI$$Limit|

IMPORT Main ;声明C程序中的Main()函数

AREA Start,CODE,READONLY ;声明代码段Start

ENTRY ;标识程序入口

CODE32 ;声明32位ARM指令

Reset LDR SP,=0x40003F00 ;初始化C程序的运行环境

LDR R0,=|Image$$RO$$Limit|

LDR R1,=|Image$$RW$$Base|

相关文档
最新文档