嵌入式系统ARM实验报告
- 格式:docx
- 大小:23.55 KB
- 文档页数:12
南京邮电大学通信与信息工程学院
实 验 报 告
实验名称: 实验一 基于ADS开发环境的设计
实验二 嵌入式Linux交叉开发环境的建立
实验三 嵌入式Linux环境下的程序设计
课程名称 嵌入式系统B
班级学号 B********
姓 名 马俊民
开课时间 2015/2016学年 第1学期
实验一 基于ADS开发环境的程序设计
一、 实验目的
1、学习ADS开发环境的使用;
2、学习和掌握ADS环境下的汇编语言及C语言程序设计;
3、学习和掌握汇编语言及C语言的混合编程方法。
二、 实验内容
1、编写和调试汇编语言程序;
2、编写和调试C语言程序;
3、编写和调试汇编语言及C语言的混合程序;
4、编写程序测试多寄存器传送指令的用法。
三、 实验原理
ADS全称为ARM Developer Suite,是ARM公司推出的新一代ARM集成开发工具。现在常用的ADS版本是ADS1.2,它取代了早期的ADS1.1和ADS1.0。
ADS用于无操作系统的ARM系统开发,是对裸机(可理解成一个高级单片机)的开发。ADS具有极佳的测试环境和良好的侦错功能,它可使硬件开发工作者更深入地从底层去理解ARM处理器的工作原理和操作方法,为日后自行设计打基础,为BootLoader的编写和调试打基础。
1.ADS软件的组成
ADS由命令行开发工具、ARM运行时库、GUI开发环境(CodeWarrior和AXD)、实用程序、支持软件等组成。
2.GUI开发环境
ADS GUI开发环境包含CodeWarrior和AXD两种,其中Code Warrior是集成开发工具,而AXD是调试工具。
使用汇编语言进行编程简单、方便,适用于初始化硬件代码、启动代码等。
汇编语言具有一些相同的基本特征:
1. 一条指令一行。
2. 使用标号(label)给内存单元提供名称,从第一列开始书写。
3. 指令必须从第二列或能区分标号的地方开始书写。
4. 注释必须跟在指定的注释字符后面,一直书写到行尾。
在ARM汇编程序中,每个段必须以AREA作为段的开始,以碰到下一个AREA作为该段的结束,段名必须唯一。程序的开始和结束需以ENTRY和END来标识。 嵌入式C语言设计是利用基本的C语言知识,面向嵌入式工程实际应用进行程序设计。为了使单独编译的C语言程序和汇编程序之间能够相互调用,必须为子程序之间的调用规定一定的规则。ATPCS就是ARM程序和Thumb程序中子程序调用的基本规则。
四、 实验过程与关键代码分析
1. 创建项目工程
在File菜单中选择New命令,打开一个新建工程对话框。在Project选项卡下,选择ARM Executable Image, 然后在Project name文本框里输入项目名称,点击确定。弹出工程窗口。
选择File菜单中的New命令,选择File标签页,在File name文本框中输入要创建的文件名。汇编程序以.s结尾,c程序以.c结尾。在Location文本框中指定文件的存放位置,选中Add to Project,在Targets中选中DebugRel,单击确定关闭窗口。
2.用汇编语言设计程序实现10的阶乘
AREA EXAMPLE, CODE, READONLY
ENTRY
start
MOV R0, #10
MOV R1, #1
LOOP
MUL R0, R0, R1
SUB R0, R0, 1
CMP R0, #1
BHI LOOP
END
在这个程序中,我们首先对R0和R1赋值,将R0作为一个变量,而R1作为一个存贮阶乘值的寄存器。在每进行一次乘法之后,将R0减1。同时在做完减法后进行判断,如果此时R0大于1,则返回继续乘法,否则结束程序,输出结果。
3.用调用子程序的方法实现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
Extern int JCP(int N)
int main()
{
int res=0;
int m=10;
int i;
for (i=1;i<=m;i++)
res=res+JCP(i);
printf(“The result =%d\n”,res);
return 0;
}
在这个程序中,主程序由c语言完成作求和,子程序由汇编语言写成作阶乘。
5.实现字符串的逆序复制TEXT1=“HELLO”=>TEXT2=“OLLEH”
AREA invstring, CODE, READONLY
start
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 =“HELLO”,0
ALIGN
TEXT2 =“OELLH”
END
五、实验小结
在这次实验中,学会了如何使用汇编程序进行编程。对汇编程序编程一些基本的要求有了一定的了解,学习了C语言的语法和在其中调用汇编程序的方法。学会了利用CodeWarrior IDE开发C和ARM汇编代码。学会了在AXD中进行代码调试的方法和过程,对AXD的调试有初步的了解。
, 实验二 嵌入式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地址
ifconfig eth0 192.168.0.121
命令配置了宿主机的IP地址。然后打开网络配置窗口,重新探测MAC地址。
重新激活。
(2)关闭防火墙
单击“Red”菜单→“系统设置”→“安全级别”→打开“安全级别配置”窗口,选择“无防火墙选项。”
(3)配置NFS。
单击“Red”菜单→“系统设置”→“服务器设置”→“服务”,在“服务配置”窗口中勾选nfs,单击“开始”
(4)NFS设置
单击“Red”菜单→“系统设置”→“服务器设置”→“NFS服务器”,打开“NFS服务器配置”窗口,设置NFS共享。
然后在NFS服务器中增加主机IP地址的链接许可和目录。完成配置。
5. 目标机的信息输出
Windows系统下,“开始”→“所有程序”→“附件”→“通讯”→“超级终端”,新建一个通信终端。区号、电话号码随意输入。设置每秒位数为“115200”,数据位为“8”,无奇偶校验,停止位为“1”,无数据流控制。单击“确定”。
6. 程序的运行
打开超级终端,启动Linux,屏幕显示:
[/mnt/yaffs]