1 / 11
文档名称:

嵌入式系统ARM实验报告.docx

格式:docx   大小:18KB   页数:11页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

嵌入式系统ARM实验报告.docx

上传人:dlmus1 2020/11/18 文件大小:18 KB

下载得到文件列表

嵌入式系统ARM实验报告.docx

文档介绍

文档介绍:南京邮电大学通信与信息工程学院
实验报告
实验名称: 实验一 基于ADS开发环境的设计
实验二嵌入式Linux交叉开发环境的建立 实验三 嵌入式 Linux 环境下的程序设计
课程名称 嵌入式系统B
班级学号 B13010711
姓 名 马俊民
开课时间 2015/2016学年 第1学期
实验一 基于 ADS 开发环境的程序设计
一、 实验目的
1、学****ADS 开发环境的使用;
2、学****和掌握 ADS 环境下的汇编语言及 C 语言程序设计;
3、学****和掌握汇编语言及 C 语言的混合编程方法。
二、 实验内容
1、编写和调试汇编语言程序;
2、编写和调试 C 语言程序;
3、编写和调试汇编语言及 C 语言的混合程序;
4、编写程序测试多寄存器传送指令的用法。
三、 实验原理
ADS全称为ARM Developer Suite,是ARh公司推出的新一代 ARM集成开发 工具。,
ADS用于无操作系统的ARM系统开发,是对裸机(可理解成一个高级单片机) 的开发。ADS具有极佳的测试环境和良好的侦错功能,它可使硬件开发工作者更 深入地从底层去理解 ARM处理器的工作原理和操作方法,为日后自行设计打基 础,为 BootLoader 的编写和调试打基础。
ADS软件的组成
ADS由命令行开发工具、ARM!行时库、GUI开发环境(CodeWarrior和AXD、 实用程序、支持软件等组成。
GUI 开发环境
ADS GUI开发环境包含 CodeWarrior和AXD两种,其中Code Warrior是集 成开发工具,而AXD是调试工具。
使用汇编语言进行编程简单、方便,适用于初始化硬件代码、启动代码等。 汇编语言具有一些相同的基本特征:
一条指令一行。
使用标号( label 、给内存单元提供名称,从第一列开始书写。
指令必须从第二列或能区分标号的地方开始书写。
注释必须跟在指定的注释字符后面,一直书写到行尾。
在ARME编程序中,每个段必须以AREA乍为段的开始,以碰到下一个AREA 作为该段的结束,段名必须唯一。程序的开始和结束需以
ENTR郴END来标识。
嵌入式C语言设计是利用基本的C语言知识,面向嵌入式工程实际应用进行 程序设计。为了使单独编译的C语言程序和汇编程序之间能够相互调用,必须为 子程序之间的调用规定一定的规则。 ATPCSft是ARM程序和Thumb程序中子程序 调用的基本规则。
四、 实验过程与关键代码分析
创建项目工程
在File菜单中选择New命令,打开一个新建工程对话框。 在Project选 项卡下,选择 ARM Executable Image, 然后在 Project name 文本框里输入
项目名称,点击确定。弹出工程窗口。
选择File菜单中的New命令,选择File 中输入要创建的文件名。 汇编程序以 .s 结尾, 文本框中指定文件的存放位置,选中 Add to
标签页,在 File name 文本框 c 程序以 .c 结尾。 在 Location
Project ,在 Targets 中选中
DebugRel,单击确定关闭窗口。
用汇编语言设计程序实现 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,贝U返回继续乘法,否则结束程序,输出结果
用调用子程序的方法实现1!+2!+3!+…+10!,代码如下:

AREA JC, CODE, READONLY
EXPORT JCP
ENTRY
JCP
ADDR3, R0, #1
MOVR2, #1
MOVR1, #1
LOOP MULR0, R1, R2
MOVR1, R0
ADDR2, R2, #1
CMPR2, R3 BNELOOP NOP
NOP MOVPC, LR
END

#include <> Extern int JCP(int N) int main()
{
int res=0;
int m=10;
int i;
for (i=1;i<=m;i++) res=res+