ARM实验三.docVIP

  • 41
  • 0
  • 约2.01千字
  • 约 4页
  • 2017-05-12 发布于河南
  • 举报
ARM实验三

一.实验目的 通过实验了解使用ADS 1.2 编写C 语言程序,并进行调试。 二.实验设备 (1)硬件:PC 机 一台 (2)软件:Windows98/XP/2000 系统,ADS 1.2 集成开发环境 三.实验内容 编写一个汇编程序文件和一个C 程序文件。汇编程序的功能是初始化堆栈指针和初始化C 程序的运行环境,然后调跳转到C 程序运行,这就是一个简单的启动程序。C 程序使用加法运算来计算1+2+3+...+(N-1)+N 的值(N0)。 四.实验预习要求 (1)仔细阅读参考文献[1]第4 章ARM 指令系统的内容。 (2)仔细阅读产品光盘附带文档《ADS 集成开发环境及仿真器应用》或其它相关资料,了解ADS 工程编辑和AXD 调试的内容。(本实验使用软件仿真)。 五.实验步骤 (1)启动ADS 1.2,使用ARM Executable Image 工程模板建立一个工程ProgramC。 (2)建立源文件Startup.S 和Test.c,编写实验程序,然后添加到工程中。 (3)设置工程链接地址RO Base 为0RW Base 为0设置调试入口地址Image entry point 为0 (4)设置位于开始位置的起始代码段,如图2.14 所示。 (5)编译链接工程,选择【Project】-【Debug】,启动AXD 进行软件仿真调试。 (6)在Startup.S 的“B Main”处设置断点,然后全速动行程序。 (7)程序在断点处停止。单步运行程序,判断程序是否跳转到C 程序中运行。 (8)选择【Processor Views】-【Variables】)打开变量观察窗口,观察全局变量的值, 单步/全速运行程序,判断程序的运算结果是否正确。 六.实验参考程序 C 语言实验的参考程序见程序清单2.8。汇编启动代码见程序清单2.6。 程序清单2.8 C 语言实验参考程序 #define uint8 unsigned char #define uint32 unsigned int #define N 100 uint32 sum; // 使用加法运算来计算1+2+3+...+(N-1)+N 的值。(N0) void Main(void) { uint32 i; sum = 0; for(i=0; i=N; i++) { sum += i; } while(1); } 程序清单2.9 简单的启动代码 ; 启动文件。初始化C 程序的运行环境,然后进入C 程序代码。 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| LDR R3,=|Image$$ZI$$Base| CMP R0,R1 BEQ LOOP1 LOOP0 CMP R1,R3 LDRCC R2,[R0],#4 STRCC R2,[R1],#4 BCC LOOP0 LOOP1 LDR R1,=|Image$$ZI$$Limit| MOV R2,#0 LOOP2 CMP R3,R1 STRCC R2,[R3],#4 BCC LOOP2 B Main ; 跳转到C 程序代码Main()函数 END 七.思考 (1)在实验参考程序中,Startup.S 文件的作用是什么?如果没有Startup.S 文件,C 程序会运行出错吗? 答:Startup.S文件的作用是为上述的汇编语句提供编译的环境。如果没有这个文件,则C语言程序的运行不会出错,因为C语言程序的运行是独立的。 (2)实验程序中的Main()函数名是否可以更改为其它名字?(提示:Main 只是一个标号) 答:可以,因为Main只是一个标号,不过在程序中的每一处有关Main()的地方都必须改过来,否则就会出现错误。 八.心得体会 教师评阅意见: 签名: 年 月 日 实验成绩:

文档评论(0)

1亿VIP精品文档

相关文档