文档介绍:该【南邮嵌入式系统B实验报告 】是由【1781111****】上传分享,文档一共【24】页,该文档可以免费在线阅读,需要了解更多关于【南邮嵌入式系统B实验报告 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:..精品--南京邮电大学通信学院实验报告实验名称:基于ADS开发环境的程序设计嵌入式Linux交叉开发环境的建立嵌入式Linux环境下的程序设计多线程程序设计课程名称嵌入式系统B班级学号姓名开课学期2016/2017学年第2学期----精品:..精品--实验一基于ADS开发环境的程序设计一、实验目的1、学****ADS开发环境的使用;2、学****和掌握ADS环境下的汇编语言及C语言程序设计;3、学****和掌握汇编语言及C语言的混合编程方法。二、实验内容1、编写和调试汇编语言程序;2、编写和调试C语言程序;3、编写和调试汇编语言及C语言的混合程序;三、实验过程与结果1、寄存器R0和R1中有两个正整数,求这两个数的最大公约数,结果保存在R3中。代码1:使用C内嵌汇编#include<>intfind_gcd(intx,inty){intgcdnum;__asm{MOVr0,xMOVr1,yLOOP:CMPr0,r1SUBLTr1,r1,r0SUBGTr0,r0,r1BNELOOP----精品:..精品--MOVr3,r0MOVgcdnum,r3//stop//Bstop//END}returngcdnum;}intmain(){inta;a=find_gcd(18,9);return0;}代码2:使用纯汇编语言AREAexample1,CODE,readonlyENTRYMOVr0,#4MOVr1,#9startCMPr0,r1SUBLTr1,r1,r0SUBGTr0,r0,r1BNEstartMOVr3,r0stopBstopEND2、寄存器R0、R1和R2中有三个正整数,求出其中最大的数,并将其保存在R3中。代码1:使用纯汇编语言AREAexamp,CODE,READONLYENTRYMOVR0,#10MOVR1,#30MOVR2,#20Start----精品:..精品--CMPR0,R1BLElbl_aCMPR0,R2MOVGTR3,R0MOVLER3,R2Blbl_blbl_aCMPR1,R2MOVGTR3,R1MOVLER3,:使用C内嵌汇编语言#include<>intfind_maxnum(inta,intb,intc){intx;__asm{MOVr0,aMOVr1,bMOVr2,cCMPr0,r1BLElbl_a//相等跳转CMPr0,r2MOVGTx,r0MOVLEx,r2//MOVr3,xBlbl_blbl_a:CMPr1,r2MOVGTx,r1MOVLEx,r2//MOVr3,xlbl_b:}returnx;}intfor_r3(intt){//intt;__asm----精品:..精品--{MOVr3,t}return0;}intmain(){inta;a=find_maxnum(130,50,70);for_r3(a);return0;}3、编程实现将从地址source开始的30个字节数据复制到地址为dest的地方。代码:NUMEQU30AREAInit,CODE,READONLYCODE32ENTRYSTARTLDRR0,=SOURCELDRR1,=DESTMOVR2,#NUMMOVSP,#0X400BLKCOPYMOVR3,R2,LSR#3BEQCOPYWORDSSTMFDSP!,{R4-R11}OCTCOPYLDMIAR0!,{R4-R11}STMIAR1!,{R4-R11}SUBSR3,R3,#1BNEOCTCOPYLDMFDSP!,{R4-R11}COPYWORDSANDSR2,R2,#7BEQSTOPWORDCOPYLDRR3,[R0],#4STRR3,[R1],#4----精品:..精品--SUBSR2,R2,#1BNEWORDCOPYSTOPBSTOPSOURCEDCD1,2,3,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!。代码:使用纯汇编语言AREAFctrl,CODE,READONLYENTRYCODE32STARTMOVR8,#10MOVR9,#0SUBR0,R8,#1LoopMOVR1,R9UMULLR8,R9,R0,R8MLAR9,R1,R0,R9SUBSR0,R0,#1BNELoopStopBStopEND5、实现字符串的逆序复制TEXT1=”HELLO”=>TEXT2=”OLLEH”。代码:使用纯汇编语言AREAinvstring,CODE,READONLYENTRYATARTADRR1,TEXT1ADRR2,TEXT2MOVR3,#0LOOPLDRBR0,[R1],#1ADDR3,R3,#1CMPR0,#0BNELOOPSUBR1,R1,#2LOOP1----精品:..精品--LDRBR0,[R1],#-1STRBR0,[R2],#1SUBR3,R3,#1CMPR3,#1BNELOOP1MOVR5,#&55NOPALIGNEND6、用调用子程序的方法实现1!+2!+3!+…….+10!代码:,CODE,READONLYEXPORTJCPENTRYJCPADDR3,R0,#1MOVR2,#1MOVR1,#1LOOPMULR0,R1,R2MOVR1,R0ADDR2,R2,#1CMPR2,R3BNELOOPNOPNOPMOVPC,#include<>ExternintJCP(intN)intmain(){intres=0;intm=10;inti;for(i=1;i<=m;i++)res=res+JCP(i);----精品:..精品--printf(“Theresult=%dn”,res);return0;}四、实验小结----精品:..精品--实验二嵌入式Linux交叉开发环境的建立一、实验目的1、掌握嵌入式Linux交叉开发环境的建立方法2、学****和掌握Linux常用命令3、学****和掌握vi编辑器的使用二、实验内容1、搭建嵌入式Linux交叉开发环境2、熟悉Linux的常用命令3、熟悉vi编辑器的常用命令三、实验原理Linux系统是UNIX系统的分支,是UNIX的微机版。Linux具有异常丰富的驱动程序资源,支持各种主流的硬件设备与技术。Linux包含了现代的UNIX操作系统的所有功能特性,这些功能包括多任务、虚拟内存、虚拟文件系统、进程间通信、对称所处理器、多用户支持等。Vi编辑器是所有UNIX和Linux下的标准编辑器。它包含3种工作模式。嵌入式系统是专用的计算机系统,它对系统的功能、可靠性、成本、体积、功耗等有严格的要求。大部分嵌入式系统没有大容量存储设备,一般不能安装大型开发软件,系统的开发需要采用交叉开发模式。四、实验过程与结果ARM2410-S试验箱,里面配有三星的芯片S3c2410X。----精品:..--VMWare软件,在Windows系统下启动虚拟机里的Linux系统。,根据向导创建一台新虚拟机并选择Linux作为客户操作系统,。,用户名为root,密码为123456。之后对共享文件设置进行调整:打开settings界面,打开sharedfolders功能,同时将路径设置到有课前下载的软件的目录下。(1)打开Linux后,打开终端窗口,,命令如下:ls./,并将所有的开发软件包安装到/arm2410s目录下,同时自动配置编译环境,建立合适的符号链接。安装完成后在目录/opt/host/armv4l/bin/下应该能看到主编译器。----精品:..--2)=$PATH:$HOME/bin:/opt/host/armv41/bin/;-unknown-linux-(1)配置IP地址----精品:..------精品:..--2)关闭防火墙----精品:..--3)配置NFS。单击“Red”菜单→“系统设置”→“服务器设置”→“服务”,在“服务配置”窗口中勾选nfs,单击“开始”(4)NFS设置单击“Red”菜单→“系统设置”→“服务器设置”→“NFS服务器”,打开“NFS服务器配置”窗口,设置NFS共享。然后在NFS服务器中增加主机IP地址的链接许可和目录。完成配置。,“开始”→“所有程序”→“附件”→“通讯”→“超级终端”,新建一个通信终端。区号、电话号码随意输入。设置每秒位数为“115200”,数据位为“8”,无奇偶校验,停止位为“1”,无数据流控制。单击“确定”。----精品:..--程序的运行打开超级终端,启动Linux,屏幕显示:[/mnt/yaffs]在超级终端上执行挂载命令:[/mnt]mount–:/arm2410s/mnt/nfs挂载成功后可执行程序。五、实验小结----精品:..精品--实验三嵌入式Linux环境下的程序设计一、实验目的1、掌握嵌入式Linux环境下的程序设计方法2、学会编写Makefile文件二、实验内容1、熟悉嵌入式教学实验箱的使用2、编写C程序和Makefile文件3、编译程序产生可执行程序4、完成主机的挂载和程序的执行三、实验原理在嵌入式Linux环境下的程序设计方法有一下几个步骤:。前三个步骤在宿主机上完成,后面的步骤在目标机上完成。四、----精品:..精品--:#include<>main(){printf(“helloB14011221”);//学号}:CC=armv4l-unknown-linux-gccEXEC=helloOBJS=+=LDFLAGS+=-staticall:$(EXEC)$(EXEC):(OBJS)$(CC)$(LDFLAGS)–o$@$(OBJS)clean:----精品:..精品---rm–f$(EXEC)*.elf*.gdb*.“make”来编译程序。makecleanmake编译成功后,。,并将/arms2410s设置为共享目录。接下来启动超级终端,建立通讯,挂载。挂载命令:执行目录下的hello程序,显示如图:----精品:..精品--五、实验小结----精品:..精品--实验四多线程程序设计一、实验目的1、了解多线程程序设计的基本原理2、学****Linux多任务管理程序的开发3、学****pthread常用库函数的使用二、实验内容1、编写多线程程序和Makefile文件2、编译程序产生可执行程序3、完成主机的挂载和程序的执行三、实验原理(1)pthread_create:创建线程函数头文件:#include<>函数原型:intpthread_create(pthread_t*thread,pthread_attr_t*attr,void*(*start_routine)(void*),void*arg);获得父进程ID:pthread_self头文件:#include<>函数原型:pthread_tpthread_self(void);测试两个线程号是否相同:pthread_equal头文件:#include<>----精品:..精品--函数原型:intpthread_equal(pthread_tthread1,pthread_tthread2);(2)pthread_join:使一个线程等待另一个线程结束头文件:#include<>函数定义:intpthread_join(pthread_tthread,void**retval);描述:pthread_join()函数,以阻塞的方式等待thread指定的线程结束。当函数返回时,被等待线程的资源被收回。如果线程已经结束,那么该函数会立即返回。并且thread指定的线程必须是joinable的。参数:thread:线程标识符,即线程ID,标识唯一线程。retval:用户定义的指针,用来存储被等待线程的返回值。返回值:0代表成功。失败,返回的则是错误号。(3)线程创建函数:pthread_t:线程句柄类型定义:typedefunsignedlongintpthread_t;用途:pthread_t用于声明线程ID。sizeof(pthread_t)=8pthread_t,在使用printf打印时,应转换为u类型。四、实验过程与关键代码分析实验代码:#include<>#include<>#include<>----精品:..精品--/*-Thread1-------------------------------------*/voidthread1(){inti=0;while(1){if(i>3)pthread_exit(0);i++;sleep(1);}}/*--Thread2-----------------------------*/voidthread2(){inti=0;while(1){if(i>5)pthread_exit(0);i++;sleep(1);}----精品:..精品--}/*--------------------------------------------------------*/intmain(void){pthread_tt1,t2;pthread_create(&t1,NULL,(void*)thread1,NULL);pthread_create(&t2,NULL,(void*)thread2,NULL);pthread_join(t1,NULL);pthread_join(t2,NULL);return0;}实验结果:----精品:..精品--实验问题:一开始编译的时候出错,提示pthread_create未定义。网上查询原因以后得知:pthread库不是linux系统默认的库,,因此在编译时要加–lpthread参数,问题解决。五、实验小结----精品