嵌入式系统实验报告_第1页
嵌入式系统实验报告_第2页
嵌入式系统实验报告_第3页
嵌入式系统实验报告_第4页
嵌入式系统实验报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式系统》实验报告姓名:学号:级:湖南工业大学

电气与信息工程学院2013年5月实验一ARM汇编指令实验1实验目的初步学会使用ADS1.2开发环境及ARM软件模拟器;通过实验掌握简单ARM汇编指令的使用方法。实验设备硬件:PC机;软件:ADS1.2。Windows98/2000/NT/XP。实验内容熟悉开发环境的使用,并使用LDR/STR和MOV等指令访问寄存器或存储单元。使用ADD/SUB/LSL/LSR/AND/ORR等指令,完成基本数学/逻辑运算。实验原理ARM处理器共有37个寄存器:31个通用寄存器,包括程序计数器(PC),这些寄存器都是32位;6个状态寄存器,这些寄存器也是32位,但只使用了其中的12位。ARM通用寄存器通用寄存器(R0~R15)可分为3类,即不分组寄存器R0~R7.分组寄存器R8~R14.程序计数器R15。存储器格式ARM体系结构将存储器看作是从零地址开始的字节的线性组合。字节0~3存放第一个字,字节4~7存放第2个字,以此类推。ARM体系结构可以用两种方法存储字数据,分别称为大端格式和小端格式。GNU基础知识EmbestIDE集成了GNU汇编器as、编译器gcc和链接器ld。因此,编写程序要符合CNU的语法和规则。关于as.gcc和ld的具体使用,请参照EmbestIDE所带的电子文档ProgRef.chm。五实验程序1.实验A程序areaInt,code,readonlyMOVr0,#xentrySTRr0,[sp]xequ 45;MOVr0,#yLDRr1,[sp]yequ 64;ADDr0,r0,r1stack_topequ0x1000;STRr0,[sp]globalstartstopstartBstopMOVsp,#stack_topend2.实验B程序areaInt|,code,readonlyxequ45;entryyequ64;

zequ87;ANDr0,r0,#0xFFstack_topequ0x1000;globalstartADDr2,r0,r1,lsr#1startLDRr0,[sp]MOVr0,#xMOVr1,#0x01ORRr0,r0,r1MOVr0,r0,lsl#8MOVr1,R2MOVr1,#yADDr2,r0,r1,lsr#1ADDr2,r0,r1,lsr#1MOVsp,#0x1000stopSTRr2,[sp]BstopMOVr0,#zend六•实验结果及分析实验A:实验B:Reg'istexValue ;--r0OxOOOOOOGDb-rl□x0000002D七0x00000000六•实验结果及分析实验A:实验B:Reg'istexValue ;--r0OxOOOOOOGDb-rl□x0000002D七0x00000000hr30x00000000Hr40x00000000Hi50x00000000卜"工丘0x00000000kr?OwOOOOOOOOkrS0x00000000卜T0x00000000Hr100x00000000Hill0x00000000Hr120x00000000krl3□wOOOOlOOOhr140x00000000OxOCiOOSOlChcpsi:nECvqIFt_SVCL-StjstnscvciiftRes这个程序实现了两数的相加。Reg'istexValueJkH'Cunrent-4…!;-r0□MOaO02D21\--rlOx0UCiCiDCi巧OxOt)Ci02L5Coxoaooooooh-x4□xoaoooooor-x5□xoaoooooo□xoaooooooowoaooooooOxOOOOOOOC0x00000000p-xlO□xoaoooooohill□xoaoooooo\-rl2□xoaoooooo\-rl3oxoaooiooo[-rl4oxoaooooooCIXOQOOS03Ch-cpsrnECvqIFt_SVCL-SpoEnscvqift_Res _rj这个程序实现了基本的数学加法,逻辑或运一、实验目的1.熟悉ARMADS1.2forARM开发环境及ARM软件模拟器的使用。2•通过实验掌握使用LDM/STM、B、BL等指令完成较为复杂的存储区访问和分支程序

的方法,学习使用条件码,加强对CPSR的认识。二.实验设备1.硬件:PC机;2.软件:ADS1.2集成开发环境。Windows98/2000/NT/XP。三.实验内容设计并调试一个存储区数据块的传送程序,具体数据块的传送要求为:将数据从源数据区snum复制到目标数据区dnum,数据的个数num假定为20,复制时以8个字为单位进行,对于最后不足8个字的数据,以字为单位进行复制。实验程序AreaInt,code,readonlyentryAreaInt,code,readonlyentryglobalstartnumequ20;startLDR r0,=srcLDR r1,=dstMOV r2,#numMOV sp,#0x400ublockcopyMOVS r3,r2,LSR#3BEQ copywordsSTMFD sp!,{r4-r11}octcopyLDMIAr0!,{r4-r11}STMIAr1!,{r4-r11}SUBSr3,r3,#1BNEoctcopyLDMFDsp!,{r4-r11}copywordsANDS r2,r2,#7BEQ stopwordcopyLDR r3,[r0],#4STR r3,[r1],#4SUBS r2,r2,#1BNE wordcopystopB stopsrcdcd1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4dstdcd0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0end实验结果及分析

RegisterValu&□'Curtent.{・・・}HrO0x0000809cp-rlOxOOOOSOEC\--r20x00000000Hr30x00000004]…r4OkOOOOOOOOHr.50x00000000卜0x00000000卜七0x000000000x00000000h'ESOkOOOOOOOOhr100x00000000p-rll0x00000000OmOOOOOOOO0x00000400[…r丄4OkOOOOOOOOh-pc0x00008048h'CtiSEnN匚uqIFt._5VC■-■spst:tLEEvqift.ResAddress0123456789abcde£:ixi:ii:ii:ii:i8i:i9D02on00no03OO00UU040000UUbi00OOUU:ih00ULI80AD02on00no03oo00UU040000UU0500OOUUDxOOOOSOE]0600000007000000080000000100co00:ixi:ii:ii:ii:i8i:iCD02on00no03oo00UU040000UU0500ooUU3X000080DD06on00no07oo00UU080000UU0100ooUUDxOOOOSOE]0200000003000000040000004C80co00这个程序实现了数据块的相互传送。实验三汇编与C语言的相互调用实验一、 实验目的阅读EmbestS3CEV40启动代码,观察处理器启动过程。学会使用EmbestIDE辅助信息窗口来分析判断调试过程和结果学会在EmbestIDE环境中编写、编译与调试汇编和C语言相互调用的程序。二、 实验设备硬件:PC机;软件:ADS1.2集成开发环境。Windows98/2000/NT/XP。三、 实验内容使用汇编完成一个随机数产生函数,通过C语言调用该函数,产生一系列随机数,存放到数组中。四、 实验原理1.ARM过程调用ATPCS(ARM)ATPCS是一系列规定应用程序之间相互调用的基本规则,包括:支持数据栈限制检查;支持只读段位置无关(ROPI);支持可读/写段位置无关(RWPI);支持ARM程序和Thumb程序的混合使用;处理浮点运算。使用以上规定的ATPCS规则是,应用程序必须遵守如下:程序编写遵守ATPCS;变量传递以中间寄存器和数据栈完成;汇编器使用-apes开关选项。程序只要遵守ATPCS相应规则,就可以使用不同的源代码来编写程序。程序间的相互调用最主要的是解决参数传递问题。应用程序之间使用中间及数据栈来传递参数,其中,第1~4个参数使用R0~R3,多用4个参数数据栈进行传递。这样,接受参数的应用程序必须知道参数的个数。但是,在应用程序被调用时,一般无从知道所传递参数的个数。用不同语言编写的应用程序在调用时可以自定义传递的约定。使用具有一定意义的形式来传递,可以很好地解决参数个数的问题。常用方法是把第1个或最后1个参数作为参数个数(包括个数本身)传递给应用程序。ATPCS中寄存器的相应关系如表3.1所列。表3.1ATPCS规则中寄存器列表ARM寄存器ATPCS别名ATPCS寄存器说明ARM寄存器ATPCS别名ATPCS寄存器说明R0~R3a1~a4参数/结果/scratch寄存器1~4R10v7、slARM状态局部变量寄存器7,数据栈限制指针寄存器R4v1局部变量寄存器1R11v8ARM状态局部变量寄存器8R5v2局部变量寄存器2R12ip子程序内部调用的临时(scratch)寄存器R6v3局部变量寄存器3R13sP数据栈指针寄存器R7v4、wr局部变量寄存器4Thumb状态工作寄存器R14lr链接寄存器R8v5ARM状态局部变量寄存器5R15PC程序计数器R9v6、sbARM状态局部变量寄存6RWPI的静态基址寄存器2.main()与__gccmain()函数当应用程序中包含了main()函数时,会引起对C运行时库的初始化。该初始化是通过函数—gccmain()实现的,即在main()函数入口处,编译器会首先调用—gccmain()函数,然后才是执行编写的代码。__gccmain()函数在GCC的标准库里实现。当应用程序中没有包含main()函数时,不会引起对C运行时库的初始化。这时,C运行时库的很多功能在应用程序中是不能使用的。如果使用main()函数作为应用程序的主函数,那么可以在源代码中间加入一个空的__gccmain()函数(用C语言或汇编语言即可)五、实验操作步骤创建新的工程,工程名为explasm。按照参考程序,重新编写源代码文件,并分别保持为randtest.c、init.s、random.s和ldscript并把它们加入工程中。按照编译-汇编器设置-链接器设置-调试器设置来设置新工程,并编译、链接工程。

4.下载调试文件,打开Memrory/Register/Watch/Variable/CallStack窗口,单步执行程序。通过以上窗口,跟踪程序运行,观察分析并记录运行结果,通过实验学会使用EmbestIDE进行应用程序的开发与调试。六、实验参考程序1.randtest.c参考源代码#include<stdio.h>/*thisfunctionprototypeisneededbecause'randomnumber'isexternal*/externunsignedintrandomnumber(void);intmain(){inti;intnTemp;unsignedintrandom[10];for(i=0;i<10;i++){unsignedintrandom[10];for(i=0;i<10;i++){nTemp=randomnumber();random[i]=nTemp;}return(0);}global_startareaqq,code,readonlyentry_start;#---Setupinterrupt/exceptionvectorsB Reset_Handlerinterworking);# ;#-BranchmustbeperformedbyaninterworkingcallaseitheranARMorThumb;#-mainCfunctionmustbesupported.Thismakesthecodenotposition-Undefined_HandlerBUndefined_Handler;#-independant.ABranchwithlinkwouldgenerateerrorsSWI_Handler;# BSWI_HandlerPrefetch_HandlerexternmainBPrefetch_HandlerAbort_Handlerldrr0,=mainBAbort_Handlermovlr,pcNOPbxr0;/*Reservedvector*/;# IRQ_HandlerBIRQ_Handler;#-LoopforeverFIQ_Handler;# BFIQ_Handler;#-Endofapplication.Normally,neveroccur.;#-CouldjumponSoftwareReset(B0x0).Reset_Handler;# LDRsp,=0x00002000;# ;#-BranchonCcodeMainfunction(with

global __gccmain__gccmainmov pc,lr3.random・global __gccmain__gccmainmov pc,lr3.random・s参考源代码AREA IRandom$$codel,CODE,READONLYentryGLOBALrandomnumberrandomnumber;#onexit;# al=low32-bitsofpseudo-randomnumber;# a2=highbit(ifyouwanttoknowit)endEOR/*(involved!)EORa3,a3,a1,LSL#12*/a1,a3,a3,LSR#20/*(similarlyinvolved!)*/STMIAip,{a1,a2}MOVpc,lrseedpointerdcdseedLDRip,seedpointerLDMIAip,{a1,a2}TSTa2,a2,LSR#1;/*tobitintocarry*/MOVSa3,a1,RRX;/*33-bitrotateright*/ADCa2,a2,a2;/*carryintoLSBofa2*/DATAGLOBALseedseeddcq0x55555555dcq0x55555555END4.ldscript参考源代码SECTIONS{.=0x0;.text:{*(.text)}.data:{*(.data)}.rodata:{*(.rodata)}.bss:{*(.bss)}}实验结果lidiess 012345«7B9abcdaf 1SCIIA血QDDDiH茹QId00FF170DE8如E8IDDdFfE7GOEB(10EB kflODDCGBOId

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论