如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
一.实验目的通过实验了解使用ADS1.2编写C语言程序,并进行调试。二.实验设备硬件:PC机一台软件:Windows98/XP/2000系统,ADS1.2集成开发环境三.实验内容编写一个汇编程序文件和一个C程序文件。汇编程序的功能是初始化堆栈指针和初始化C程序的运行环境,然后调跳转到C程序运行,这就是一个简单的启动程序。C程序使用加法运算来计算1+2+3+...+(N-1)+N的值(N>0)。四.实验预习要求(1)仔细阅读参考文献[1]第4章ARM指令系统的内容。(2)仔细阅读产品光盘附带文档《ADS集成开发环境及仿真器应用》或其它相关资料,了解ADS工程编辑和AXD调试的内容。(本实验使用软件仿真)五.实验步骤(1)启动ADS1.2,使用ARMExecutableImage工程模板建立一个工程ProgramC。(2)建立源文件Startup.S和Test.c,编写实验程序,然后添加到工程中。(3)设置工程链接地址ROBase为0x40000000,RWBase为0x40003000。设置调试入口地址Imageentrypoint为0x40000000。(4)设置位于开始位置的起始代码段,如图2.14所示。图2.14起始代码段的设置(5)编译链接工程,选择【Project】->【Debug】,启动AXD进行软件仿真调试。(6)在Startup.S的“BMain”处设置断点,然后全速动行程序。(7)程序在断点处停止。单步运行程序,判断程序是否跳转到C程序中运行。(8)选择【ProcessorViews】->【Variables】)打开变量观察窗口,观察全局变量的值,单步/全速运行程序,判断程序的运算结果是否正确。六.实验参考程序C语言实验的参考程序见程序清单2.8。汇编启动代码见程序清单2.6。程序清单2.8C语言实验参考程序#defineuint8unsignedchar#defineuint32unsignedint#defineN100uint32sum;//使用加法运算来计算1+2+3+...+(N-1)+N的值。(N>0)voidMain(void){uint32i;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|IMPORTMain;声明C程序中的Main()函数AREAStart,CODE,READONLY;声明代码段StartENTRY;标识程序入口CODE32;声明32位ARM指令ResetLDRSP,=0x40003F00;初始化C程序的运行环境LDRR0,=|Image$$RO$$Limit|LDRR1,=|Image$$RW$$Base|LDRR3,=|Image$$ZI$$Base|CMPR0,R1BEQLOOP1LOOP0CMPR1,R3LDRCCR2,[R0],#4STRCCR2,[R1],#4BCCLOOP0LOOP1LDRR1,=|Image$$ZI$$Limit|MOVR2,#0LOOP2CMPR3,R1STRCCR2,[R3],#4BCCLOOP2BMain;跳转到C程序代码Main()函数END七.思考在实验参考程序中,Startup.S文件的作用是什么?如果没有Startup.S文件,C程序会运行出错吗?答:作用是启动代码,初始化C程序的运行环境,然后进入C程序代码运行C程序。如果没有Startup.S文件,C程序不能运行,因为没有运行环境。实验程序中的Main()函数名是否可以更改为其它名字?(提示:Main只是一个标号)答:Main()函数名是可以更改为其它名字,因为Main只是一个标号。