南邮嵌入式系统B实验报告2文档格式.docx

上传人:b****2 文档编号:364035 上传时间:2023-04-28 格式:DOCX 页数:22 大小:408.33KB
下载 相关 举报
南邮嵌入式系统B实验报告2文档格式.docx_第1页
第1页 / 共22页
南邮嵌入式系统B实验报告2文档格式.docx_第2页
第2页 / 共22页
南邮嵌入式系统B实验报告2文档格式.docx_第3页
第3页 / 共22页
南邮嵌入式系统B实验报告2文档格式.docx_第4页
第4页 / 共22页
南邮嵌入式系统B实验报告2文档格式.docx_第5页
第5页 / 共22页
南邮嵌入式系统B实验报告2文档格式.docx_第6页
第6页 / 共22页
南邮嵌入式系统B实验报告2文档格式.docx_第7页
第7页 / 共22页
南邮嵌入式系统B实验报告2文档格式.docx_第8页
第8页 / 共22页
南邮嵌入式系统B实验报告2文档格式.docx_第9页
第9页 / 共22页
南邮嵌入式系统B实验报告2文档格式.docx_第10页
第10页 / 共22页
南邮嵌入式系统B实验报告2文档格式.docx_第11页
第11页 / 共22页
南邮嵌入式系统B实验报告2文档格式.docx_第12页
第12页 / 共22页
南邮嵌入式系统B实验报告2文档格式.docx_第13页
第13页 / 共22页
南邮嵌入式系统B实验报告2文档格式.docx_第14页
第14页 / 共22页
南邮嵌入式系统B实验报告2文档格式.docx_第15页
第15页 / 共22页
南邮嵌入式系统B实验报告2文档格式.docx_第16页
第16页 / 共22页
南邮嵌入式系统B实验报告2文档格式.docx_第17页
第17页 / 共22页
南邮嵌入式系统B实验报告2文档格式.docx_第18页
第18页 / 共22页
南邮嵌入式系统B实验报告2文档格式.docx_第19页
第19页 / 共22页
南邮嵌入式系统B实验报告2文档格式.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

南邮嵌入式系统B实验报告2文档格式.docx

《南邮嵌入式系统B实验报告2文档格式.docx》由会员分享,可在线阅读,更多相关《南邮嵌入式系统B实验报告2文档格式.docx(22页珍藏版)》请在冰点文库上搜索。

南邮嵌入式系统B实验报告2文档格式.docx

BNELOOP

MOVr3,r0

MOVgcdnum,r3

//stop

//Bstop

//END

}

returngcdnum;

}

intmain()

{

inta;

a=find_gcd(18,9);

printf("

gcdnum:

%d\n"

a);

return0;

代码2:

使用纯汇编语言

AREAexample1,CODE,readonly

ENTRY

MOVr0,#4

MOVr1,#9

start

BNEstart

stop

Bstop

END

2、寄存器R0、R1和R2中有三个正整数,求出其中最大的数,并将其保存在R3中。

AREAexamp,CODE,READONLY

ENTRY

MOVR0,#10

MOVR1,#30

MOVR2,#20

Start

CMPR0,R1

BLElbl_a

CMPR0,R2

MOVGTR3,R0

MOVLER3,R2

Blbl_b

lbl_a

CMPR1,R2

MOVGTR3,R1

lbl_b

B.

END

使用C内嵌汇编语言

#include<

intfind_maxnum(inta,intb,intc)

intx;

MOVr0,a

MOVr1,b

MOVr2,c

CMPr0,r1

BLElbl_a//相等跳转

CMPr0,r2

MOVGTx,r0

MOVLEx,r2

//MOVr3,x

Blbl_b

lbl_a:

CMPr1,r2

MOVGTx,r1

//MOVr3,x

lbl_b:

returnx;

intfor_r3(intt)

//intt;

MOVr3,t

a=find_maxnum(130,50,70);

for_r3(a);

max:

%d\r\n"

3、编程实现将从地址source开始的30个字节数据复制到地址为dest的地方。

代码:

NUMEQU30

AREAInit,CODE,READONLY

CODE32

ENTRY

START

LDRR0,=SOURCE

LDRR1,=DEST

MOVR2,#NUM

MOVSP,#0X400

BLKCOPY

MOVR3,R2,LSR#3

BEQCOPYWORDS

STMFDSP!

{R4-R11}

OCTCOPY

LDMIAR0!

STMIAR1!

SUBSR3,R3,#1

BNEOCTCOPY

LDMFDSP!

COPYWORDS

ANDSR2,R2,#7

BEQSTOP

WORDCOPY

LDRR3,[R0],#4

STRR3,[R1],#4

SUBSR2,R2,#1

BNEWORDCOPY

STOP

BSTOP

LTORG

SOURCEDCD1,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,6

DESTDCD0,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

4、用汇编语言设计实现10!

代码:

AREAFctrl,CODE,READONLY

CODE32

MOVR8,#10

MOVR9,#0

SUBR0,R8,#1

Loop

MOVR1,R9

UMULLR8,R9,R0,R8

MLAR9,R1,R0,R9

SUBSR0,R0,#1

BNELoop

StopBStop

5、实现字符串的逆序复制TEXT1=”HELLO”=>

TEXT2=”OLLEH”。

AREAinvstring,CODE,READONLY

ATART

ADRR1,TEXT1

ADRR2,TEXT2

MOVR3,#0

LOOP

LDRBR0,[R1],#1

ADDR3,R3,#1

CMPR0,#0

BNELOOP

SUBR1,R1,#2

LOOP1

LDRBR0,[R1],#-1

STRBR0,[R2],#1

SUBR3,R3,#1

CMPR3,#1

BNELOOP1

MOVR5,#&

55

NOP

TEXT1="

HELLO"

0

ALIGN

TEXT2="

OELLH"

6、用调用子程序的方法实现1!

+2!

+3!

+…….+10!

asmp.s

AREAJC,CODE,READONLY

EXPORTJCP

ENTRYJCP

ADDR3,R0,#1

MOVR2,#1

MOVR1,#1

LOOPMULR0,R1,R2

MOVR1,R0

ADDR2,R2,#1

CMPR2,R3

BNELOOP

NOP

MOVPC,LR

PROGC.c

ExternintJCP(intN)

intmain(){

intres=0;

intm=10;

inti;

for(i=1;

i<

=m;

i++)

res=res+JCP(i);

printf(“Theresult=%d\n”,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种工作模式。

嵌入式系统是专用的计算机系统,它对系统的功能、可靠性、成本、体积、功耗等有严格的要求。

大部分嵌入式系统没有大容量存储设备,一般不能安装大型开发软件,系统的开发需要采用交叉开发模式。

四、实验过程与结果

实验用的是UP-NetARM2410-S试验箱,里面配有三星的芯片S3c2410X。

打开电脑上VMWare软件,在Windows系统下启动虚拟机里的Linux系统。

接着需要

1.宿主机的环境搭建

下载并运行VMWare,根据向导创建一台新虚拟机并选择Linux作为客户操作系统,再根据向导安装RedHatLinux9.0。

2.虚拟机中启动Linux操作系统

使用root登陆,用户名为root,密码为123456。

之后对共享文件设置进行调整:

打开settings界面,打开sharedfolders功能,同时将路径设置到有课前下载的软件的目录下。

3.开发工具软件的安装

(1)安装gcc

打开Linux后,打开终端窗口,在共享的目录下找到install.sh并运行,命令如下:

ls

./install.sh

安装程序将自动建立/arm2410s目录,并将所有的开发软件包安装到/arm2410s目录下,同时自动配置编译环境,建立合适的符号链接。

安装完成后在目录/opt/host/armv4l/bin/下应该能看到主编译器。

(2)配置PATH路径

vi.bash.profile

将里面PATH变量改为PATH=$PATH:

$HOME/bin:

/opt/host/armv41/bin/;

存盘后执行

source.bash_profile

以后armv4l-unknown-linux-gcc将被自动搜索到

4.宿主机上的开发环境配置

(1)配置IP地址

(2)关闭防火墙

(3)配置NFS。

单击“Red”菜单→“系统设置”→“服务器设置”→“服务”,在“服务配置”窗口中勾选nfs,单击“开始”

(4)NFS设置

单击“Red”菜单→“系统设置”→“服务器设置”→“NFS服务器”,打开“NFS服务器配置”窗口,设置NFS共享。

然后在NFS服务器中增加主机IP地址的链接许可和目录。

完成配置。

5.目标机的信息输出

Windows系统下,“开始”→“所有程序”→“附件”→“通讯”→“超级终端”,新建一个通信终端。

区号、电话号码随意输入。

设置每秒位数为“115200”,数据位为“8”,无奇偶校验,停止位为“1”,无数据流控制。

单击“确定”。

6.程序的运行

打开超级终端,启动Linux,屏幕显示:

[/mnt/yaffs]

在超级终端上执行挂载命令:

[/mnt]mount–tnfs192.168.0.121:

/arm2410s/mnt/nfs

挂载成功后可执行程序。

五、实验小结

实验三嵌入式Linux环境下的程序设计

1、掌握嵌入式Linux环境下的程序设计方法

2、学会编写Makefile文件

1、熟悉嵌入式教学实验箱的使用

2、编写C程序和Makefile文件

3、编译程序产生可执行程序

4、完成主机的挂载和程序的执行

在嵌入式Linux环境下的程序设计方法有一下几个步骤:

1.编写源程序

2.编写Makefile文件

3.编译程序

4.运行和调试程序

5.将生产的可执行文件加入文件系统。

前三个步骤在宿主机上完成,后面的步骤在目标机上完成。

四、实验过程与关键代码分析

1.建立工作目录

mkdirhello

cdhello

2.编写源程序

用vi编辑器编辑Hello.c文件

viHello.c

在Vi中输入源程序如下:

#include<

main()

printf(“helloB14011221\n”);

//学号

3.编写Makefile文件

viMakefile

在vi中编辑Makefile文件如下:

CC=armv4l-unknown-linux-gcc

EXEC=hello

OBJS=hello.o

CFLAGS+=

LDFLAGS+=-static

all:

$(EXEC)

$(EXEC):

(OBJS)

$(CC)$(LDFLAGS)–o$@$(OBJS)

clean:

-rm–f$(EXEC)*.elf*.gdb*.o

4.编译程序

在hello目录下运行“make”来编译程序。

makeclean

make

编译成功后,生成可执行文件Hello.o。

5.下载调试

在宿主机上启动nfs服务,并将/arms2410s设置为共享目录。

接下来启动超级终端,建立通讯,挂载。

挂载命令:

执行目录下的hello程序,显示如图:

实验四多线程程序设计

1、了解多线程程序设计的基本原理

2、学习Linux多任务管理程序的开发

3、学习pthread常用库函数的使用

1、编写多线程程序和Makefile文件

2、编译程序产生可执行程序

3、完成主机的挂载和程序的执行

(1)pthread_create:

创建线程函数

头文件:

pthread.h>

函数原型:

intpthread_create(pthread_t*thread,pthread_attr_t*attr,void*(*start_routine)(void*),void*arg);

获得父进程ID:

pthread_self

pthread.h>

pthread_tpthread_self(void);

测试两个线程号是否相同:

pthread_equal

intpthread_equal(pthread_tthread1,pthread_tthread2);

(2)pthread_join:

使一个线程等待另一个线程结束

头文件:

函数定义:

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)=8

pthread_t,在使用printf打印时,应转换为u类型。

实验代码:

stdlib.h>

time.h>

#include"

pthread.h"

/*-Thread1-------------------------------------*/

voidthread1()

inti=0;

while

(1)

{printf("

thread1:

i);

if(i>

3)

pthread_exit(0);

i++;

sleep

(1);

/*--Thread2-----------------------------*/

voidthread2()

{inti=0;

thread2:

5)

/*--------------------------------------------------------*/

intmain(void)

pthread_tt1,t2;

pthread_create(&

t1,NULL,(void*)thread1,NULL);

t2,NULL,(void*)thread2,NULL);

pthread_join(t1,NULL);

pthread_join(t2,NULL);

实验结果:

实验问题:

一开始编译的时候出错,提示pthread_create未定义。

网上查询原因以后得知:

pthread库不是linux系统默认的库,连接时需要使用静态libpthread.a,因此在编译时要加–lpthread参数,问题解决。

如有侵权请联系告知删除,感谢你们的配合!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2