1、南京邮电大学海外学院实 验 报 告实验名称:实验一 基于 ADS 开发环境的程序设计实验二 嵌入式 Linux 交叉开发环境的建立实验三 嵌入式 Linux 环境下的程序设计课程名称 嵌入式系统与开发 班级学号 姓 名 开课时间 2014/2015 学年 第 1 学期 实验一 基于 ADS 开发环境的程序设计一、 实验目的1、学习 ADS 开发环境的使用;2、学习和掌握 ADS 环境下的汇编语言及 C 语言程序设计;3、学习和掌握汇编语言及 C 语言的混合编程方法。二、 实验内容1、编写和调试汇编语言程序;2、编写和调试 C 语言程序;3、编写和调试汇编语言及 C 语言的混合程序;4、编写程序
2、测试多寄存器传送指令的用法。三、 实验原理ADS 全称为 ARM Developer Suite,是 ARM 公司推出的新一代 ARM 集成开发工具。现在常用的 ADS 版本是 ADS1.2,它取代了早期的 ADS1.1 和 ADS1.0。ADS 用于无操作系统的 ARM 系统开发,是对裸机(可理解成一个高级单片机)的开发。ADS 具有极佳的测试环境和良好的侦错功能,它可使硬件开发工作者更深入地从底层去理解 ARM 处理器的工作原理和操作方法,为日后自行设计打基础,为 BootLoader 的编写和调试打基础。1.ADS 软件的组成ADS 由命令行开发工具、ARM 运行时库、GUI 开发环境(
3、CodeWarrior 和AXD) 、实用程序、支持软件等组成。2.GUI 开发环境ADS GUI 开发环境包含 CodeWarrior 和 AXD 两种,其中 Code Warrior 是集成开发工具,而 AXD 是调试工具。使用汇编语言进行编程简单、方便,适用于初始化硬件代码、启动代码等。汇编语言具有一些相同的基本特征:1. 一条指令一行。2. 使用标号(label)给内存单元提供名称,从第一列开始书写。3. 指令必须从第二列或能区分标号的地方开始书写。4. 注释必须跟在指定的注释字符后面,一直书写到行尾。在 ARM 汇编程序中,每个段必须以 AREA 作为段的开始,以碰到下一个 AREA
4、作为该段的结束,段名必须唯一。程序的开始和结束需以 ENTRY 和 END 来标识。嵌入式 C 语言设计是利用基本的 C 语言知识,面向嵌入式工程实际应用进行程序设计。为了使单独编译的 C 语言程序和汇编程序之间能够相互调用,必须为子程序之间的调用规定一定的规则。ATPCS 就是 ARM 程序和 Thumb 程序中子程序调用的基本规则。四、 实验过程与关键代码分析1. 创建项目工程在 File 菜单中选择 New 命令,打开一个新建工程对话框。在 Project选项卡下,选择 ARM Executable Image, 然后在 Project name 文本框里输入项目名称,点击确定。弹出工程
5、窗口。选择 File 菜单中的 New 命令,选择 File 标签页,在 File name 文本框中输入要创建的文件名。汇编程序以.s 结尾,c 程序以.c 结尾。在Location 文本框中指定文件的存放位置,选中 Add to Project,在Targets 中选中 DebugRel,单击确定关闭窗口。2.用汇编语言设计程序实现 10 的阶乘AREA EXAMPLE, CODE, READONLYENTRYstartMOV R0, #10MOV R1, #1LOOPMUL R0, R0, R1SUB R0, R0, 1CMP R0, #1BHI LOOPEND在这个程序中,我们首先对
6、R0 和 R1 赋值,将 R0 作为一个变量,而 R1 作为一个存贮阶乘值的寄存器。在每进行一次乘法之后,将 R0 减 1。同时在做完减法后进行判断,如果此时 R0 大于 1,则返回继续乘法,否则结束程序,输出结果。3.用调用子程序的方法实现 1!+2!+3!+10!,代码如下:asmp.sAREA JC, CODE, READONLYEXPORT JCPENTRYJCPADDR3,R0,#1MOVR2,#1MOVR1,#1LOOP MULR0,R1,R2MOVR1,R0ADDR2,R2,#1CMPR2,R3BNELOOPNOPNOPMOVPC,LRENDPROGC.c#include Ext
7、ern int JCP(int N)int main()int res=0;int m=10;int i;for (i=1;iTEXT2=“OLLEH”AREA invstring, CODE, READONLYstartADRR1, TEXT1ADRR2, TEXT2MOVR3, #0LOOPLDRB R0, R1, #1ADDR3, R3, #1CMPR0, #0BNELOOPSUBR1, R1, #2LOOP1LDRB R0, R1, #-1STRB R0, R2, #1SUBR3, R3, #1CMPR3, #1BNELOOP1MOVR5, #存盘后执行source .bash_pro
8、file以后 armv4l-unknown-linux-gcc 将被自动搜索到4. 宿主机上的开发环境配置(1)配置 IP 地址ifconfig eth0 192.168.0.121命令配置了宿主机的 IP 地址。然后打开网络配置窗口,重新探测 MAC 地址。重新激活。(2)关闭防火墙单击“Red”菜单“系统设置”“安全级别”打开“安全级别配置”窗口,选择“无防火墙选项。 ” (3)配置 NFS。单击“Red”菜单“系统设置”“服务器设置”“服务” ,在“服务配置”窗口中勾选 nfs,单击“开始”(4)NFS 设置单击“Red”菜单“系统设置”“服务器设置”“NFS 服务器” ,打开“NFS
9、服务器配置”窗口,设置 NFS 共享。然后在 NFS 服务器中增加主机 IP 地址的链接许可和目录。完成配置。5. 目标机的信息输出Windows 系统下, “开始”“所有程序”“附件”“通讯”“超级终端” ,新建一个通信终端。区号、电话号码随意输入。设置每秒位数为“115200”,数据位为“8” ,无奇偶校验,停止位为“1” ,无数据流控制。单击“确定” 。6. 程序的运行打开超级终端,启动 Linux,屏幕显示:/mnt/yaffs在超级终端上执行挂载命令:/mnt mount t nfs 192.168.0.121:/arm2410s /mnt/nfs挂载成功后可执行程序。五、实验小结在
10、这次实验中,学会建立 Linux 交叉开发环境,学会了 ls 和 vi,cd 等常用的 Linux 命令,并掌握了 Vi 编辑器的使用方法。同时知道了如何在搭建失败时寻找错误进行排错。实验三 嵌入式 Linux 环境下的程序设计一、实验目的1、掌握嵌入式 Linux 环境下的程序设计方法2、学会编写 Makefile 文件二、实验内容1、熟悉嵌入式教学实验箱的使用2、编写 C 程序和 Makefile 文件3、编译程序产生可执行程序4、完成主机的挂载和程序的执行三、实验原理在嵌入式 Linux 环境下的程序设计方法有一下几个步骤:1. 编写源程序2. 编写 Makefile 文件3. 编译程序
11、4. 运行和调试程序5. 将生产的可执行文件加入文件系统。前三个步骤在宿主机上完成,后面的步骤在目标机上完成。四、实验过程与关键代码分析1. 建立工作目录mkdir hellocd hello2. 编写源程序用 vi 编辑器编辑 Hello.c 文件 vi Hello.c在 Vi 中输入源程序如下:#include main()printf(“hello world n”);3编写 Makefile 文件vi Makefile在 vi 中编辑 Makefile 文件如下:CC= armv4l-unknown-linux-gccEXEC = helloOBJS = hello.oCFLAGS +
12、=LDFLAGS+= -staticall: $(EXEC)$(EXEC): (OBJS)$(CC) $(LDFLAGS) o $ $(OBJS)clean:-rm f $(EXEC) *.elf *.gdb *.o4.编译程序在 hello 目录下运行“make”来编译程序。make cleanmake编译成功后,生成可执行文件 Hello.o。5.下载调试在宿主机上启动 nfs 服务,并将/arms2410s 设置为共享目录。接下来启动超级终端,建立通讯,挂载。/mnt mount t nfs 192.168.0.121:/arm2410s /mnt/nfs挂载成功后,进入/mnt/nfs
13、,再进入/mnt/nfs/hello,直接运行刚刚编译生成的可执行文件 Hello.o,查看运行结果cd hello. /hello可以看见“Hello world”只需要挂载一次便可,只要实验箱没有重启,就可以一直保持连接。反复修改、编译、调试,直至程序调试通过。6.可执行文件加入文件系统程序调试通过后,可以把可执行文件拖放到 usr/bin 目录下,然后使用mkcramfs 制作工具生成新的文件系统。当系统启动后,就可以在相应目录下执行可执行程序 hello.五、实验小结在这次实验中,学会了在嵌入式 Linux 环境下设计程序。同时知道了如何对目标机进行挂载。以及如何在发现挂载不成功寻找错误进行修改。另外在编译文件时需要注意的也都有所了解。