arm嵌入式系统——基于ads1.2及proteus仿真 教学课件 作者 邓力讲义 补充)ads axd汇编实验.doc
文本预览下载声明
课时授课计划
课 题
(章节名称)
ADS1.2 集成开发环境实验
时间
2012年3月12日 星期1
教学目的与要求
CodeWarrior的界面和使用
2.使用AXD 进行仿真调试
教学重点
项目的编译和调试
教学难点
AXD的调试
教学方法
练习
教学时数
2
课外作业
主要内容
时间分配
1.进一步熟悉CodeWarrior的界面和使用
2.进一步熟悉使用AXD 进行仿真调试
3.汇编指令的编译与调试
4.完成汇编指令两个数相加的代码与调试
15
15
35
35
课后小结
学生对AXD仿真还要加强
1.学习如何使用ADS 中的CodeWarrior ——项目管理器来管理源代码。一个嵌入式系统项目通常是由多个文件构成的,这其中包括用不同的语言(如汇编或C)、不同的类型(源文件,或库文件)的文件。CodeWarrior 通过“工程(Project)”来管理一个项目相关的所有文件。因此,在我们正确编译这个项目代码以前,首先要建立“工程”,并加入必要的源文件、库文件等。
2使用AXD 进行仿真调试
在CodeWarrior编译环境中,工程经过编译成功,产生了*.axf 文件之后,就可以进行调试了。点击 按钮,进入了AXD 视窗界面
AXD调试器的使用
AXD观测窗口
AXD 提供了许多有用的观察窗口,点击菜单项中的Processor View ,可以从它的下拉菜单项中
了解可观察的项目。
这里说明一下其中常用的项目:
Registers:可以查看CPU 在各个工作模式下内部寄存器的值;
Variables :查看变量,本地变量、全局变量、类变量;
Watch :可以用表达式查看变量的值;
Backtrace:函数调用情况(堆栈)查看;
Memory:查看存储器内容。输入地址,即可查看这个地址开始的存储单元的值。
3.汇编指令的运行:
0xAA0x55
0xAA
0x55
R2
R1
运行MOV R1,R2
通过AXD查看R1,R2的值
若原有:0x
0x55
R1
R2
00xAA
0x4000000C
查看以下指令的运行结果
LDR R1,[R2]
LDR R1,[R2]
若:
0xBB
0xBB
0x400000CC
0x55
0x55
R2
R3
00xAA
0x4000000C
运行LDR R2,[R3,#0x0C]
加法运算:
AREA TEST1,CODE,READONLY ; 声明代码段TEST1
ENTRY ; 标识程序入口
CODE32 ; 声明32位ARM指令
START MOV R0,#15 ; 设置参数
MOV R1,#8
ADDS R0,R0,R1 ; R0 = R0 + R1
B START
END
建立ADS工程项目,添加TEST1.S程序到项目中,启ADX进行后,使用单步方式运行程序,注意查看相对应的寄存器的值。
子程序加法运算:
;文件名:TEST1.S
;功能:实现两个寄存器相加
;说明:使用ARMulate软件仿真调试
AREA TEST2,CODE,READONLY ;声明代码段TEST2
ENTRY ;标识程序入口
CODE32 ;声明32位ARM指令
START MOV R0,#0 ;设置参数
MOV R1,#10
LOOP BL ADD_SUB ;调用子程序ADD_SUB
B LOOP ;跳转到LOOP
ADD_SUB
ADDS R0,R0,R1 ;R0 = R0 + R1
MOV PC,LR ;子程序返回
END ;文件结束
建立ADS工程项目,添加TEST2.S程序到项目中,启ADX进行后,使用单步方式运行程序,注意查看相对应的寄存器的值。编写程序时注意标号顶格写。
ADX运行C语言:
编写C语言的入口汇编程序(add.s):
IMPORT main
AREA add,CODE,READONLY
CODE32
ENTRY
BL main
END
编写C语言程序(main.c):
int main(void)
{
while(1);
}
将ADD.S和main.c程序添加到项目中后进行如下设置:
设置ARM Linker中:
(1).在Output中Linktype选Simple,将Simple image中RO BO Base设为0x0,RE Base为空。
(2)Options中的Image entry point
显示全部