南邮嵌入式系统B实验报告2016年度-2017年度-2_第1页
南邮嵌入式系统B实验报告2016年度-2017年度-2_第2页
南邮嵌入式系统B实验报告2016年度-2017年度-2_第3页
南邮嵌入式系统B实验报告2016年度-2017年度-2_第4页
南邮嵌入式系统B实验报告2016年度-2017年度-2_第5页
免费预览已结束,剩余18页可下载查看

付费下载

下载本文档

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

文档简介

1、南京邮电大学通信学院实验报告实验名称:基于ADS开发环境的程序设计嵌入式Linux交叉开发环境的建立 嵌入式Linux环境下的程序设计多线程程序设计课程名称嵌入式系统B班级学号开课学期2016/2017学年 第2学期实验一 基于ADS开发环境的程序设计一、实验目的1、学习ADS开发环境的使用;2、学习和掌握ADS环境下的汇编语言及C语言程序设计;3、学习和掌握汇编语言及 C语言的混合编程方法。二、实验内容1、编写和调试汇编语言程序;2、编写和调试C语言程序;3、编写和调试汇编语言及C语言的混合程序;、实验过程与结果1、寄存器RO和R1中有两个正整数,求这两个数的最大公约数,结果保存 在R3中。

2、代码1:使用C内嵌汇编#in cludeint fin d_gcd(i nt x,i nt y)int gcdnum;_asmrO, xr1, yrO, r1MOVMOVLOOP:CMPSUBLT r1, r1, r0SUBGT r0, r0, r1BNE LOOPMOV r3, r0MOV gcdn um,r3 /sto p/ B sto p/ ENDretur n gcdnum;int mai n()int a;a =fin d_gcd(18,9);sto PBsto pEND寄存器RO、R1和R2中有三个正整数,求出其中最大的数,并将其保存prin tf(gcd nu m:%dn,a);

3、 return 0;AREAexa mpl e1,CODE,read onlyENTRYMOVr0, #4MOVr1, #9CMPr0, r1SUBLT r1, r1, r0SUBGT r0, r0, r1BNEstartMOVr3, r0start代码2:使用纯汇编语言2、在R3中。代码1:使用纯汇编语言AREA examp,CODE,READONL YENTRYMOV R0,#10MOV R1,#30MOV R2,#20StartCMP R0,R1BLE lbl_aCMP R0,R2MOVGT R3,R0MOVLE R3,R2B lbl b lbl_aCMP R1,R2MOVGT R3,R

4、1MOVLE R3,R2 lbl_bB .END代码2:使用C内嵌汇编语言#in elude int fin d_max nu m(i nt a,i nt b,i nt c)int兀asmMOV r0,aMOV r1,bMOV r2,cCMP r0,r1BLE lbl_a相等跳转CMP r0,r2MOVGT x,r0MOVLE x,r2/MOV r3,xB lbl b lbl_a:CMP r1,r2MOVGT x,r1MOVLE x,r2/MOV r3,xlbl_b:return x;int for_r3(i nt t)/int t;asmMOV r3,treturn 0;int mai n(

5、)int a;a = fin d_max num(130,50,70);for_r3(a);prin tf(max:%drn,a); return 0;3、编程实现将从地址source开始的30个字节数据复制到地址为dest的地方。 代码:NUMEQU 30AREAIn it, CODE, READONL YCODE32ENTRYLDRR0,=SOURCELDRR1,=DESTMOVR2,#NUMMOVSP, #0X400BLKC OPYMOVR3,R2,LSRBEQCOPY WORDSSTMFDSP!,R4-R11OCTCOPYLDMIAR0!,R4-R11STMIAR1!,R4-R11SU

6、BSR3,R3,#1BNEOCTCOPYLDMFDSP!,R4-R11COPY WORDSANDSR2,R2,#7BEQSTOPWORDCOPYLDRR3,R0,#4STARTSTRR3,#4#3SUBSR1,R2,R2,#1BNEWORDCOPYSTOPSTOPLTORGSOURCEDCD123,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4,5,6DESTDCD0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0END4、用汇编语言设计实现10!。 代码:使用纯汇编语言AR

7、EA Fctrl,CODE,READONL YENTRYCODE32STARTMOV R8 , #10MOV R9 , #0SUB R0,R8,#1LoopMOV R1 , R9UMULL R8 , R9 , R0 , R8MLA R9 , R1 , R0 , R9SUBS R0 , R0 , #1BNE Loo pSto p B StopEND5、实现字符串的逆序复制 TEXT1= HELLO = TEXT2=” OLLEH。 代码:使用纯汇编语言AREA in vstri ng, CODE, READONL YENTRYATARTADR R1, TEXT1ADR R2, TEXT2MOV

8、R3,#0LOOPLDRB R0, R1, #1ADD R3, R3,#1CMP R0, #0BNE LOOPSUB R1, R1, #2LOOP1LDRB R0, R1, #-1STRB R0, R2, #1SUB R3, R3,#1CMP R3, #1BNE LOOP1MOV R5, #&55NOPTEXT1 = HELLO,0ALIGNTEXT2 = OELLHEND6用调用子程序的方法实现1! +2! +3! +.+10!代码:asmp .sAREA JC, CODE, READONL YEXPORT JCPENTRYJCPADD R3, RO, #1MOV R2, #1MOV R1,

9、 #1LOOP MUL RO, R1, R2MOV R1, ROADD R2, R2, #1CMP R2, R3BNE LOOPNOPNOPMOV P C, LRENDP ROGC.c#in elude Extern int JCP (i nt N)int mai n() int res=0;int m=10;int i;for (i=1;ifh 耳 4 4 *kLl l | g 一rflE I !EHht*;T T I f Rl瞇 J ll * F-l hrli I |.jIB|jmI|. FI nAjrJ I 斗 J I X ,71 f 匣 j *F 4ntfrpIMU* II*HiK.屁

10、Q|高0阿|皿.】5商 F/= 011Q Cl g hiri hM. +n(2)关闭防火墙pl/p,直fei请为储的乘畅选忏住卞级别*Il : ill bill ;-l llniillr 比HI安全级别; WWW HTTPl FTP S5H TellneV ethO sitO兀它踹:丨;门吃乐rcpiM 垠?fV)口叵)0詈划请为您前杲统选掙近十级别BisEUnuxSU*- n I nm心要垂鋼引汗)n 勺 ii I fr Enforcrnc7 /r. S时垂新注亦签taraeted|tPHTTPiD ServiiceName ServiceNIFSNI5取消Q I &确运g、(3) 配置NF

11、S单击“ Red菜单-“系统设置” T 置”窗口中勾选nfs,单击“开始”(4) NFS设置单击“ Red菜单-“系统设置服务器设置NFS服务器”,打开 “ NFS服务器配置”窗口,设置 NFS共享。然后在NFS服务器中增加主机IP地址的链接许可和目录。完成配置。5. 目标机的信息输出Windows系统下,“开始所有程序附件通讯超级 终端”,新建一个通信终端。区号、电话号码随意输入。设置每秒位数为“ 115200”,数据位为“ 8”,无奇偶校验,停止位为“ 1”,无数据流控制。 单击“确定”。6. 程序的运行打开超级终端,启动Linux,屏幕显示:/mn t/yaffs在超级终端上执行挂载命令

12、:/mnt mount - t nfs 21:/arm2410s /mnt/nfs挂载成功后可执行程序。“服务器设置”-“服务”,在“服务配“附件”五、实验小结实验三嵌入式Linux环境下的程序设计一、实验目的1、掌握嵌入式Linux环境下的程序设计方法2、学会编写Makefile文件二、实验内容熟悉嵌入式教学实验箱的使用 编写C程序和Makefile文件 编译程序产生可执行程序完成主机的挂载和程序的执行1、2、3、4、实验原理在嵌入式Linux环境下的程序设计方法有一下几个步骤:1. 编写源程序2. 编写Makefile 文件3. 编译程序4. 运行和调试程序5. 将生

13、产的可执行文件加入文件系统。前三个步骤在宿主机上完成,后面的步骤在目标机上完成。四、实验过程与关键代码分析1.建立工作目录mkdir hello cd hello2.编写源程序用vi编辑器编辑Hello.c文件vi Hello.c在Vi中输入源程序如下:#i nclude mai n()printf( “ hello B14011221 n ”); / 学号3.编写Makefile文件vi Makefile在vi中编辑Makefile文件如下: CC= armv4l-u nknown-li nu x-gcc EXEC = helloOBJS = hello.o CFLAGS +=LDFLAGS

14、+= -staticall: $(EXEC)$(EXEC): (OBJS)$(CC) $(LDFLAGS) - o $ $(OBJS) clean :-rm - f $(EXEC) *.elf *gdb *.o4. 编译程序在hello目录下运行“ make来编译程序。make clea nmake编译成功后,生成可执行文件 Hello.o。立 IE);ii Kfi.r*lUOl t Ll仃星it-,. HhftS 丄皿 litJitJ.L - yt JittS. YiVTj 丈持些衙舸吐 勺&令 ft I LSC fil-C -Li Il= Iu . O htllu-C* i I a 11L

15、 * iJ hull I) lie I Id. b5.下载调试在宿主机上启动超级终端,建立通讯, 挂载命令:执行目录下的hello程序,显示如图:nfs挂载。服务,并将/arms2410s设置为共享目录。接下来启动-0 nolock -0tcp 192.168,0-121:/orm241Os /nnt/nfs五、实验小结hello.c hello. 0龜版构淆? c/mnt/nfsJlsMakefilehelloVERSION-?.2 hello.c /mnt/nfs./hello hello B14011221 /nnt/nfs实验四多线程程序设计一、实验目的1、了解多线程程序设计的基本原理

16、2、学习Linux多任务管理程序的开发3、学习Pthread常用库函数的使用二、实验内容1、编写多线程程序和Makefile文件2、编译程序产生可执行程序3、完成主机的挂载和程序的执行、实验原理(1) P thread_create创建线程函数 头文件:#include 函数原型:int pthread_create(pthread_t *thread,pthread_attr_t *attr,void*(*start_routi ne)(void *),void *arg);获得父进程ID:pthread_self头文件:#includevpthread.h 函数原型:p threadp t

17、hread_self(void);测试两个线程号是否相同:pthread_equal头文件:#includevpthread.h函数原型:int p thread_equal( pthread_t threadl, pthread_t thread2);(2)pthreadjoin:使一个线程等待另一个线程结束头文件:#include vpthread.h函数定义:int p thread_joi n(p thread_t thread, void *retval);描述:pthread_join()函数,以阻塞的方式等待thread指定的线程结束。当 函数返回时,被等待线程的资源被收回。如果

18、线程已经结束,那么该函数会立即 返回。并且thread指定的线程必须是joinable的。参数:thread:线程标识符,即线程ID,标识唯一线程。retval:用户定义 的指针,用来存储被等待线程的返回值。返回值:0代表成功。 失败,返回的则是错误号。(3)线程创建函数:pthread_t:线程句柄类型定义:typ edef un sig ned long int p thread_t;用途:pthread_t用于声明线程ID。sizeof(p thread_t) =8pthread_t,在使用printf打印时,应转换为u类型。四、实验过程与关键代码分析实验代码:#i nclude #i

19、nclude #in clude #i nclude p thread.h/*-Thread1 void thread1() int i=0; while(1)*/prin tf(thread1 :%dn,i); if (i3)p thread_exit(O);i+;slee p(1);/*-Thread2- void thread2() int i=0; while(1)*/prin tf(thread2 :%dn,i); if (i5)p thread_exit(0);i+;slee p(1);/*int main (void)*/pthread_t t1, t2;pthread_crea

20、te(&t1, NULL, (void*)thread1, NULL); pthread_create(&t2, NULL, (void*)thread2, NULL);p threadjoi n( t1, NULL); pthreadjoi n( t2, NULL);return 0;实验结果:rool (SPIoca I ho si J W cd I esstp ih reodrod 1 oca I hoil l es l plhregJl# 宾 cc lei plhreacLc -o 1 es I plhread/ inp/cccth:), o( , t ex b2 e In fiinc, ion mi nW: undefined reference to plhrtad_ceait/ inpZccctlVi. of. leTi t+OvcD: In fund ion iwi n ::undu fJned re

温馨提示

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

评论

0/150

提交评论