南邮嵌入式系统B实验报告2016-2017-2
更新时间:2023-09-23 06:17:01 阅读量: 人文社科 文档下载
- 南邮嵌入式培养推荐度:
- 相关推荐
实验名称:
南京邮电大学通信学院
实 验 报 告
基于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
// B stop // END } return gcdnum; }
int main() { int a; a = find_gcd(18,9);
printf(\ return 0; }
代码2:使用纯汇编语言 AREA example1,CODE,readonly ENTRY MOV r0, #4 MOV r1, #9 start CMP r0, r1 SUBLT r1, r1, r0 SUBGT r0, r0, r1 BNE start MOV r3, r0 stop B stop
END
2、寄存器R0 、R1和R2中有三个正整数,求出其中最大的数,并将其保存在R3中。
代码1:使用纯汇编语言
AREA examp,CODE,READONLY ENTRY
MOV R0,#10 MOV R1,#30 MOV R2,#20 Start
CMP R0,R1 BLE lbl_a CMP R0,R2 MOVGT R3,R0 MOVLE R3,R2 B lbl_b lbl_a
CMP R1,R2 MOVGT R3,R1 MOVLE R3,R2 lbl_b
B . END
代码2:使用C内嵌汇编语言 #include
int find_maxnum(int a,int b,int c)
{ int x; __asm { MOV r0,a MOV r1,b MOV r2,c CMP r0,r1 BLE lbl_a //相等跳转 CMP r0,r2 MOVGT x,r0 MOVLE x,r2 //MOV r3,x B lbl_b lbl_a: CMP r1,r2 MOVGT x,r1 MOVLE x,r2 //MOV r3,x lbl_b: } return x; }
int for_r3(int t) { //int t; __asm { MOV r3,t } return 0; }
int main() { int a; a = find_maxnum(130,50,70); for_r3(a); printf(\ return 0; }
3、编程实现将从地址source开始的30个字节数据复制到地址为dest的地
方。 代码:
NUM EQU 30
AREA Init, CODE, READONLY CODE32 ENTRY START
LDR R0, =SOURCE LDR R1, =DEST MOV R2, #NUM MOV SP, #0X400 BLKCOPY
MOV R3, R2, LSR #3
BEQ COPYWORDS STMFD SP!, {R4-R11} OCTCOPY
LDMIA R0!, {R4-R11} STMIA R1!, {R4-R11} SUBS R3, R3, #1 BNE OCTCOPY LDMFD SP!, {R4-R11} COPYWORDS
ANDS R2,R2, #7 BEQ STOP WORDCOPY
LDR R3, [R0], #4 STR R3, [R1], #4 SUBS R2, R2, #1 BNE WORDCOPY STOP
B STOP
LTORG
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,2,3,4,5,6 DEST 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,0
END
4、用汇编语言设计实现10!。
代码:使用纯汇编语言
AREA Fctrl,CODE,READONLY ENTRY CODE32 START MOV R8 , #10 MOV R9 , #0
SUB R0,R8,#1 Loop MOV R1 , R9 UMULL R8 , R9 , R0 , R8 MLA R9 , R1 , R0 , R9 SUBS R0 , R0 , #1 BNE Loop Stop B Stop END
5、实现字符串的逆序复制TEXT1=”HELLO”=> TEXT2=”OLLEH”。 代码:使用纯汇编语言
AREA invstring, CODE, READONLY ENTRY ATART ADR R1, TEXT1 ADR 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 = \ALIGN
TEXT2 = \ END
6、用调用子程序的方法实现1!+2!+3!+??.+10! 代码:
asmp.s
AREA JC, CODE, READONLY EXPORT JCP ENTRY JCP ADD R3, R0, #1 MOV R2, #1
MOV R1, #1
LOOP MUL R0, R1, R2 MOV R1, R0 ADD R2, R2, #1
CMP R2, R3 BNE LOOP NOP NOP
MOV PC, LR END
PROGC.c
#include
for (i=1;i<=m;i++) res=res+JCP(i);
printf(“The result =%d\\n”,res); return 0; }
四、实验小结
实验二 嵌入式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作为客户操作系统,再根据向导安装RedHat Linux 9.0。
2. 虚拟机中启动Linux操作系统
使用root登陆,用户名为root,密码为123456。之后对共享文件设置进行调整:打开settings界面,打开shared folders功能,同时将路径设置到有课前下载的软件的目录下。
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 –t nfs 192.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. 建立工作目录
mkdir hello cd hello
2. 编写源程序
用vi编辑器编辑Hello.c文件 vi Hello.c
在Vi中输入源程序如下: #include
printf(“hello B14011221 \\n”); //学号 }
3.编写Makefile文件
vi Makefile
在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”来编译程序。 make clean make
编译成功后,生成可执行文件Hello.o。
5.下载调试
在宿主机上启动nfs服务,并将/arms2410s设置为共享目录。接下来启动超级终端,建立通讯,挂载。
挂载命令:
执行目录下的hello程序,显示如图:
五、实验小结
实验四 多线程程序设计
一、实验目的
1、了解多线程程序设计的基本原理 2、学习Linux多任务管理程序的开发 3、学习pthread 常用库函数的使用
二、实验内容
1、编写多线程程序和Makefile文件 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_t pthread_self(void);
测试两个线程号是否相同:pthread_equal 头文件:#include
函数原型:int pthread_equal(pthread_t thread1,pthread_t thread2); (2)pthread_join:使一个线程等待另一个线程结束 头文件 : #include
函数定义: 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) =8
pthread_t,在使用printf打印时,应转换为u类型。 四、实验过程与关键代码分析 实验代码:
#include
/*-Thread1-------------------------------------*/ void thread1() {
int i=0; while(1)
{ printf(\ if (i>3)
pthread_exit(0); i++; sleep(1); } }
/*--Thread2-----------------------------*/ void thread2() { int i=0; while(1)
{ printf(\ if (i>5)
pthread_exit(0); i++; sleep(1); } }
/*--------------------------------------------------------*/ int main(void) {
pthread_t t1, t2;
pthread_create(&t1, NULL, (void*)thread1, NULL); pthread_create(&t2, NULL, (void*)thread2, NULL);
pthread_join(t1, NULL); pthread_join(t2, NULL);
return 0; }
实验结果:
实验问题:一开始编译的时候出错,提示pthread_create未定义。网上查询原因以后得知:pthread库不是linux系统默认的库,连接时需要使用静态libpthread.a,因此在编译时要加 –lpthread参数,问题解决。 五、实验小结
正在阅读:
成都苍蝇馆子大全11-28
学会自我保护作文400字06-14
教育学章节练习题08-17
2016-2017学年高中化学 专题4.1.1 二氧化硅和硅酸教学案04-10
廉政研讨报告12-29
综合类试题及答案08-13
公路勘测设计复习题库答案10-23
不要抱怨作文700字07-08
SRDF容灾解决方案概述08-05
- 粮油储藏基础知识
- 论文范文(包括统一封面和内容的格式)
- 经典解题方法
- 综合部后勤办公用品管理办法+领用表
- 学生宿舍突发事件应急预案
- 16秋浙大《生理学及病理生理学》在线作业
- 四分比丘尼戒本(诵戒专用)
- 浙江财经大学高财题库第一章习题
- 九大员岗位职责(项目经理、技术负责人、施工员、安全员、质检员、资料员、材料员、造价员、机管员)
- 旅游财务管理习题(学生版)
- 德阳外国语高二秋期入学考试题
- 投资学 精要版 第九版 第11章 期权市场
- 控制性详细规划城市设计认识
- bl03海运提单3国际贸易答案
- 2010-2011学年湖北省武汉市武珞路中学七年级(上)期中数学试卷
- VB程序填空改错设计题库全
- 教师心理健康案例分析 - 年轻班主任的心理困惑
- 民间借贷司法解释溯及力是否适用?
- 三联书店推荐的100本好书
- 《化工原理》(第三版)复习思考题及解答
- 嵌入式
- 实验
- 报告
- 系统
- 2016
- 2017
- 青少年激情犯罪的犯罪构成分析
- 1、电动汽车控制与车辆电子控制技术-海峡项目成果交易会 - 图文
- 2018年6月考试《大学英语》在线考核试题
- 2018北京市各区初三数学一模试题分类 - 四边形
- 线上培训讲师合作协议(线上课程+推广)
- 专升本《机械设计基础》套题(三) - 图文
- 影响企业核心竞争力的品牌因素分析
- 无机化学实验报告
- 磷脂化学与提取
- 国学论文 - -论庄子的“逍遥观”
- 价值百万元的销售信笔记
- 小学六年级音乐《半屏山》教案
- 沪建管2014 125号文
- 信息技术教育的探讨
- 本 数据库上机实验指导书
- 电大习题
- 南靖部分高中实行体育选项课的利弊分析
- 湘版美术二年级上册集体备课全册教案
- 九年级数学期中试卷和答案
- 北外生产运作管理第一次作业(精品):联想手机的业务发展、南方旅游汽车公司选址