南邮嵌入式系统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页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

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

2、大公约数,结果保存在R3中。代码1:使用C内嵌汇编#include<stdio.h>int find_gcd(int x,int y)intgcdnum;_asmMOV r0, xMOV r1, yLOOP:CMP r0, r1SUBLT r1, r1, r0SUBGT r0, r0, r1BNE LOOPMOVr3, r0MOV gcdnum,r3/stop/B stop/ENDreturn gcdnum;int main()int a;a=find_gcd(18,9);printf("gcdnum:%dn",a);return 0;代码2:使用纯汇编语言AR

3、EA example1,CODE,readonlyENTRYMOV r0, #4MOV r1, #9startCMP r0, r1SUBLT r1, r1, r0SUBGT r0, r0, r1BNE startMOVr3, r0stopB stopEND2、寄存器R0 、R1和R2中有三个正整数,求出其中最大的数,并将其保存在R3中。代码1:使用纯汇编语言AREA examp,CODE,READONLYENTRYMOV R0,#10MOV R1,#30MOV R2,#20StartCMP R0,R1BLE lbl_aCMP R0,R2MOVGT R3,R0MOVLE R3,R2B lbl_b

4、lbl_aCMP R1,R2MOVGT R3,R1MOVLE R3,R2lbl_bB .END代码2:使用C内嵌汇编语言#include <stdio.h>intfind_maxnum(int a,int b,int c)int x;_asmMOV r0,aMOV r1,bMOV r2,cCMP r0,r1BLE lbl_a/相等跳转CMP r0,r2MOVGT x,r0MOVLE x,r2/MOV r3,xB lbl_blbl_a:CMP r1,r2MOVGT x,r1MOVLE x,r2/MOV r3,x lbl_b:return x;int for_r3(int t) /in

5、t t;_asmMOV r3,treturn 0;int main()int a;a = find_maxnum(130,50,70);for_r3(a); printf("max:%drn",a);return 0;3、编程实现将从地址source开始的30个字节数据复制到地址为dest的地方。代码:NUM EQU 30 AREA Init, CODE, READONLY CODE32 ENTRY STARTLDR R0, =SOURCE LDR R1, =DEST MOV R2, #NUM MOV SP, #0X400 BLKCOPY MOV R3, R2, LSR #

6、3 BEQ COPYWORDS STMFD SP!, R4-R11 OCTCOPYLDMIA R0!, R4-R11 STMIA R1!, R4-R11 SUBS R3, R3, #1 BNE OCTCOPY LDMFD SP!, R4-R11 COPYWORDSANDS R2,R2, #7 BEQ STOP WORDCOPYLDR R3, R0, #4 STR R3, R1, #4 SUBS R2, R2, #1 BNE WORDCOPY STOPB STOPLTORG SOURCE DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,

7、2,3,4,5,6DEST DCD 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,0,0END4、用汇编语言设计实现10!。代码:使用纯汇编语言AREA Fctrl,CODE,READONLY ENTRYCODE32STARTMOV R8 , #10MOV R9 , #0 SUB R0,R8,#1 LoopMOV R1 , R9 UMULL R8 , R9 , R0 , R8MLA R9 , R1 , R0 , R9SUBS R0 , R0 , #1 BNE Loop Stop B StopEND5、实现字符串的逆序复制TEXT

8、1=”HELLO”=> TEXT2=”OLLEH”。代码:使用纯汇编语言AREA invstring, CODE, READONLY ENTRYATART ADR R1, TEXT1ADR R2, TEXT2 MOV R3, #0 LOOP LDRB R0, R1, #1 ADD R3, R3,#1 CMP R0, #0 BNE LOOP SUB R1, R1, #2 LOOP1 LDRB R0, R1, #-1 STRB R0, R2, #1 SUB R3, R3, #1 CMP R3, #1 BNE LOOP1 MOV R5, #&55 NOP TEXT1 = "H

9、ELLO",0ALIGN TEXT2 = "OELLH" END6、用调用子程序的方法实现1!+2!+3!+.+10!代码:asmp.s AREA JC, CODE, READONLYEXPORT JCPENTRY JCPADD R3, R0, #1MOV R2, #1MOV R1, #1LOOP MUL R0, R1, R2MOV R1, R0ADD R2, R2, #1CMP R2, R3BNE LOOPNOPNOPMOV PC, LRENDPROGC.c#include <stdio.h>Extern int JCP(int N)int main

10、() int res=0;int m=10;int i;for (i=1;i<=m;i+)res=res+JCP(i);printf(“The result =%dn”,res);return 0; 四、实验小结实验二 嵌入式Linux交叉开发环境的建立一、实验目的1、掌握嵌入式Linux交叉开发环境的建立方法2、学习和掌握Linux常用命令3、学习和掌握vi编辑器的使用二、实验内容1、搭建嵌入式Linux交叉开发环境2、熟悉Linux的常用命令3、熟悉vi编辑器的常用命令三、实验原理Linux系统是UNIX系统的分支,是UNIX的微机版。Linux具有异常丰富的驱动程序资源,支持各种主

11、流的硬件设备与技术。Linux包含了现代的UNIX操作系统的所有功能特性,这些功能包括多任务、虚拟内存、虚拟文件系统、进程间通信、对称所处理器、多用户支持等。Vi编辑器是所有UNIX和Linux下的标准编辑器。它包含3种工作模式。嵌入式系统是专用的计算机系统,它对系统的功能、可靠性、成本、体积、功耗等有严格的要求。大部分嵌入式系统没有大容量存储设备,一般不能安装大型开发软件,系统的开发需要采用交叉开发模式。四、实验过程与结果实验用的是UP-NetARM2410-S试验箱,里面配有三星的芯片S3c2410X。打开电脑上VMWare软件,在Windows系统下启动虚拟机里的Linux系统。接着需要

12、1. 宿主机的环境搭建 下载并运行VMWare,根据向导创建一台新虚拟机并选择Linux作为客户操作系统,再根据向导安装RedHat Linux 9.0。2. 虚拟机中启动Linux操作系统 使用root登陆,用户名为root,密码为123456。之后对共享文件设置进行调整:打开settings界面,打开shared folders功能,同时将路径设置到有课前下载的软件的目录下。3. 开发工具软件的安装(1)安装gcc打开Linux后,打开终端窗口,在共享的目录下找到install.sh并运行,命令如下:ls. / install.sh安装程序将自动建立/arm2410s目录,并将所有的开发软

13、件包安装到/arm2410s 目录下,同时自动配置编译环境,建立合适的符号链接。安装完成后在目录/opt/host/armv4l/bin/下应该能看到主编译器。(2)配置PATH路径 vi .file将里面PATH变量改为PATH=$PATH:$HOME/bin:/opt/host/armv41/bin/;存盘后执行 source .bash_profile以后armv4l-unknown-linux-gcc将被自动搜索到4. 宿主机上的开发环境配置(1)配置IP地址(2)关闭防火墙(3)配置NFS。单击“Red”菜单“系统设置”“服务器设置”“服务”,在“服务配置”窗口中勾选

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

15、8.0.121:/arm2410s /mnt/nfs挂载成功后可执行程序。五、实验小结实验三 嵌入式Linux环境下的程序设计一、实验目的1、掌握嵌入式Linux环境下的程序设计方法2、学会编写Makefile文件 二、实验内容1、熟悉嵌入式教学实验箱的使用2、编写C程序和Makefile文件3、编译程序产生可执行程序4、完成主机的挂载和程序的执行三、实验原理在嵌入式Linux环境下的程序设计方法有一下几个步骤:1. 编写源程序2. 编写Makefile文件3. 编译程序4. 运行和调试程序5. 将生产的可执行文件加入文件系统。前三个步骤在宿主机上完成,后面的步骤在目标机上完成。四、实验过程与

16、关键代码分析1. 建立工作目录mkdir hellocd hello2. 编写源程序用vi编辑器编辑Hello.c文件 vi Hello.c在Vi中输入源程序如下:#include <stdio.h>main()printf(“hello B14011221 n”); /学号3编写Makefile文件vi Makefile在vi中编辑Makefile文件如下:CC= armv4l-unknown-linux-gccEXEC = helloOBJS = hello.oCFLAGS +=LDFLAGS+= -staticall: $(EXEC)$(EXEC): (OBJS)$(CC)

17、$(LDFLAGS) o $ $(OBJS)clean:-rm f $(EXEC) *.elf *.gdb *.o4.编译程序在hello目录下运行“make”来编译程序。make cleanmake编译成功后,生成可执行文件Hello.o。5.下载调试在宿主机上启动nfs服务,并将/arms2410s设置为共享目录。接下来启动超级终端,建立通讯,挂载。挂载命令:执行目录下的hello程序,显示如图:五、实验小结实验四 多线程程序设计一、实验目的1、了解多线程程序设计的基本原理2、学习Linux多任务管理程序的开发3、学习pthread 常用库函数的使用 二、实验内容1、编写多线程程序和Mak

18、efile文件2、编译程序产生可执行程序3、完成主机的挂载和程序的执行三、实验原理(1) pthread_create:创建线程函数头文件:#include < pthread.h >函数原型:int pthread_create(pthread_t *thread,pthread_attr_t *attr,void *(*start_routine)(void *),void *arg); 获得父进程 ID:pthread_self头文件:#include<pthread.h>函数原型:pthread_t pthread_self(void); 测

19、试两个线程号是否相同:pthread_equal头文件:#include<pthread.h>函数原型:int pthread_equal(pthread_t thread1,pthread_t thread2);(2)pthread_join:使一个线程等待另一个线程结束头文件 : #include <pthread.h>函数定义: int pthread_join(pthread_t thread, void *retval);描述 :pthread_join()函数,以阻塞的方式等待thread指定的线程结束。当函数返回时,被等待线程的资源被收回。如果线程已经结束,那么该函数会立即返回。并且thread指定的线程必须是joinable的。参数 :thread: 线程标识符,即线程ID,标识唯一线程。retval: 用户定义的指针,用来存储被等待线程的返回值。返回值 : 0代表成功。 失败,返回的则是错误号。(3)线程创建函数: pthread_t:线程句柄类型定义:typedef unsigned long int pthread_t;用途:pthread_t用于声明线程ID。sizeof(pthread_t) =8pthread_t,在使用printf打印时,应转换为u类型。四、实验过程与关键代码分析实验代码:#include <s

温馨提示

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

评论

0/150

提交评论