山东大学嵌入式实验报告

上传人:cn****1 文档编号:549522164 上传时间:2022-11-25 格式:DOC 页数:30 大小:741.50KB
返回 下载 相关 举报
山东大学嵌入式实验报告_第1页
第1页 / 共30页
山东大学嵌入式实验报告_第2页
第2页 / 共30页
山东大学嵌入式实验报告_第3页
第3页 / 共30页
山东大学嵌入式实验报告_第4页
第4页 / 共30页
山东大学嵌入式实验报告_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《山东大学嵌入式实验报告》由会员分享,可在线阅读,更多相关《山东大学嵌入式实验报告(30页珍藏版)》请在金锄头文库上搜索。

1、嵌入式实验报告班级:电信工X班 姓名:XXX 学号:XXXX 实验一、ARM汇编指令实验简单数据搬移实验实验目的:熟悉实验开发环境,掌握简单ARM汇编的使用方法实验内容熟悉开发环境并使用/STR,MOV等指令访问寄存器或存储单元;使用ADS/SUB/LSL/LSR/AND/ORR等指令完成基本数学/逻辑运算。实验要求(1) 按照前面叙述介绍的方法,在ADS下创建一个工程asmlabl,定义两个变量x,y和堆栈地址0x1000,将变量x的内容存到堆栈顶,然后计算x+y,并将和存到堆栈的下一个单元。通过AXD查看寄存器和memory和寄存器中数据的变化。(2) 在指令后面加上适当注释,说明指令功能

2、。(3) 指出程序执行后各相关寄存器及存储器单元的具体内容。程序代码截图如下:程序运行结果截图:由实验结果可知堆栈的第二个单元中存放了x+y的值6D练习题编写程序实现对一段数据的最大值和最小值搜索,最大值存在于max变量之中,最小值存在于min变量之中。提示:数据的定义采用伪指令:DCD来实现。基本思路:利用R0做基地址,将R1,R2分别放入第一单元的内容,利用R3做循环计数,利用R4遍历读取第2至最后一个数据,如果R1的数据小于新读入的R4数据则将R4的内容存入R1,如果R2的内容大于R4的内容则将R4的内容存入R2,。遍历完成之后,R1将存放最大数据,R2将存放最小数据。程序代码截图如下:

3、程序运行结果截图:实验二 ARM汇编指令实验2-字符串拷贝实验实验目的通过实验掌握使用LDB/STB,b等指令完成较为复杂的存储区访问和程序分支,学会使用条件码。实验内容熟悉开发环境的使用并完成一块存储区的拷贝。完成分支程序设计,要求判断参数,根据不同参数,调用不同的子程序。实验要求(1) 按照2.3节介绍的方法,在ADS下创建一个工程asmab2,定义两个数据存储区Src和Dst,Src用于存放原字符串,Dst用于存放目的字符串。堆栈地址0x400,将变量原字符串的内容拷贝到目的字符串中,要能判断原字符串的结束符(0),并统计字符串的个数。通过AXD查看寄存器和memory和寄存器中数据的变

4、化。(2) 在指令后面加上适当注释,说明指令功能。(3) 指出程序执行完后各相关寄存器及存储器单元的具体内容。程序代码截图如下:程序运行结果源字符串字符串复制后两个数据存储区Src:0x8040和Dst:0x8047中的数据情况实验三 ARM汇编指令实验3-ARM处理器工作模式实验实验目的(1) 通过实验掌握学会使用msr/mrs指令实现ARM处理器工作模式的切换,观察不同模式下的寄存器,加深对CPU结构的理解;(2) 通过实验掌握ld中如何使用命令指定代码段起始地址。实验内容通过ARM汇编指令,在各种处理器模式下切换并观察各种模式下寄存器的区别;掌握ARM不同模式的进入与退出。实验要求(1)

5、 按照2.3节介绍的方法,在ADS下创建一个工程asmmodelab,完成各个模式下的堆栈初始化工作,并将R1-R12的内容存入当前模式下堆栈。通过AXD运用单步执行方式调用程序,验证工作的模式,使用寄存器观察切换到不同的工作模式下观察SP(R13)的变化情况。(2) 实验过程中请记录并思考以下内容:1) 程序复位之后系统处于什么模式?2) 记录每种模式下的厨师堆栈指针,以及执行R1-R12内容压栈后本模式堆栈相关内存单元的数值。并分析快速中断FIQ模式与其他模式存入的R1-R12有什么不同。3) 切换成用户模式之后还能否从用户模式切换到其他模式?4) 用户模式下能否执行堆栈压栈操作?如果能的

6、话,观察用户模式下压栈之前和之后其堆栈区域的变化情况。5) 观察本程序模式切换过程中SPSR有无变化,并解释其原因。程序运行结果截图:6) 程序复位之后系统处于什么模式?答:程序复位之后系统处于管理模式。7) 记录每种模式下的初始堆栈指针,以及执行R1-R12内容压栈后本模式堆栈相关内存单元的数值。并分析快速中断FIQ模式与其他模式存入的R1-R12有什么不同。答:(管理模式)即管理模式的栈顶指针为0x8240满递减模式,r1-r12压栈后,管理模式栈顶指针为0x8210相距0x30,压入12个字(中断模式)观察r13,中断模式的堆栈地址为0x8340满递减模式,r1-r12压栈后,中断模式栈

7、顶指针为0x8310,相距0x30,压入12个字(快速中断模式)观察r13,快速中断模式的堆栈地址为0x8380满递减模式,观察运行结果发现,快速中断模式中只有R1-R7压栈了,这是因为在快速中断模式中,可访问的寄存器只有R1-R7,不能访问R8-R12,快速中断模式下有自己的R8-R12。(中止模式)观察r13,中止模式的堆栈地址为0x83C0满递减模式,r1-r12压栈后,中止模式栈顶指针为0x8310,相距0x30,压入12个字(未定义模式)观察r13,未定义模式的堆栈地址为0x8400满递减模式,r1-r12压栈后,未定义模式栈顶指针为0x83d0,相距0x30,压入12个字(系统模式

8、)观察r13,系统模式的堆栈地址为0x81C0满递减模式,r1-r12压栈后,系统模式栈顶指针为0x8190,相距0x30,压入12个字分析快速中断FIQ模式与其他模式存入的R1-R12有什么不同:快速中断FIQ模式中:R8R13都是0。这是因为在快速中断模式中,可访问的寄存器只有R1-R7,不能访问R8-R12,快速中断模式下有自己的R8-R12。8) 切换成用户模式之后还能否从用户模式切换到其他模式(如系统模式)?答:在该例程中,由用户模式不可以切换到系统模式。当处理器工作在用户模式时,正在执行的程序不能访问某些被保护的系统资源,也不能改变模式,除非异常发生。9) 用户模式下能否执行堆栈压

9、栈操作?如果能的话,观察用户模式下压栈之前和之后其堆栈区域的变化情况。答:用户模式下能执行堆栈压栈操作。未压栈时:用户模式堆栈指针初始值为0X8190压栈之后,堆栈指针减小0x30,这是因为堆栈设置为满递减模式,所以堆栈指针减小0x30,存放12个字。10) 观察本程序模式切换过程中SPSR有无变化,并解释其原因。答:模式切换过程中SPSR无变化,因为在整个切换过程中没有异常发生,所以SPSR无变化。实验四 ARM汇编与C混合编程实验-ARM启动过程控制实验实验目的(1) 掌握建立基本完整的ARM 工程,包含启动代码,C语言程序等;(2) 了解ARM 启动过程,学会编写简单的C 语言程序和汇编

10、程序启动代码并进行调试;(3) 掌握如何指定代码入口地址与入口点;(4) 掌握通过memory/register/watch/variable 窗口分析判断错误。实验内容使用汇编语言编写初始化程序,并引导至C语言main函数,用汇编语言编写延时函数实现毫秒级的延时,在C语言中调用延时函数,实现1s钟定时。实验要求(1)按照2.3节介绍的方法,在ADS下创建一个工程armasmc,编写3个文件,通过AXD运用单步执行方式进行调试程序,观察程序执行过程中的寄存器及存储器的变化情况。(2)实验过程中请记录并思考以下内容:1)如何建立异常矢量入口表?2)如何在汇编语言中切换至C语言的main函数?3)

11、如何在C语言中调用汇编语言函数,并完成参数传递?4)汇编语言函数中用到的寄存器如何保护与恢复,为什么要保护参考程序中的R11?5将delay.s中的R11改成R4,并将两条R11的保护与恢复语句stmfd sp!,r12和 ldmfd sp!r11删掉,在C语言程序中的语句i-处设置端点,观察运行过程中变量i的变化情况,并解释其中的原因。程序原代码截图:Init完成异常矢量表的建立,模式堆栈初始化,并将程序引导至C语言的main函数C语言程序,调用汇编语言文件delay.s汇编delay.s延时程序思考题:思考题1) 如何建立异常矢量入口表?要设置中断类型号,设置中断服务子程序段地址2)如何在

12、汇编语言中切换至C语言的main函数?为了保证程序调用时参数的正确传递,汇编程序设计要遵守ATPCS。在C程序中不需要任何关键字来声明将被汇编语言调用的C程序,但需要在汇编语言程序之前使用IMPORT伪操作来声明该C程序。在汇编程序中通过BL指令来调用子程序。3) 如何在C语言中调用汇编语言函数,并完成参数传递?为了保证程序调用时参数的正确传递,汇编程序设计要遵守ATPCS。在汇编程序中需要使用EXPORT伪操作来声明,同时,在C程序中调用该汇编程序之前需要在C语言程序中使用extern关键词来声明该汇编程序。4) 汇编语言函数中用到的寄存器如何保护与恢复,为什么要保护参考程序中的R11? 根

13、据ATPCS标准,R11对应ARM 状态局部变量寄存器8。因为R11中可能含有其他重要的数据,所以要保护程序中R11。汇编语言函数中用到的寄存器的保护与恢复需要用到压栈与出栈。5)将delay.s中的R11改成R4,并将两条R11的保护与恢复语句stmfd sp!,r12和 ldmfd sp!r11删掉,在C语言程序中的语句i-处设置端点,观察运行过程中变量i的变化情况,并解释其中的原因。修改后程序如图由于根据ATPCS标准,R4对应局部变量寄存器1,即i,所以在delay.s中,R4的值减为1,若不进行保护,则返回C程序后经i-,i值变为-1,永远不为0,无法执行if语句。导致i值一直递减下

14、去 实验五 ARM硬件接口实验1-基本IO实验实验目的(1) GPIO的功能配置方法;(2) 通过寄存器访问引脚的方法;(3) 实现GPIO输入输出功能的基本编程方法。实验内容编写S3C2440X处理器的端口控制程序,实现利用按键控制的跑马灯程序。GPC5,GPC6,GPC7三个引脚连接发光二极管,按钮开关连接在GPF5引脚。上电后,GPC5,GPC6,GPC7三个引脚连接发光二极管,轮流显示,当按钮开关按下去,方向反向。PS:实验过程中要注意按键去抖动和每个发光二极管显示一定的时间(至少100ms).实验要求(1)运行AXD加载生成的image文件,运行程序,观察程序执行的效率。并观察按键按下和松开跑马灯轮换方向。(2)实验过程中请记录并思考以下内容:1)如何访问寄存器并修改其中的1位或者多位数据?2)如何配置S3C2440的PIO端口?3)在C语言中如何实现按键处理程序?4)如何初始化DRAM,从而实现程序下载并在线调试?5)尝试实现利用按键切换控制跑马灯的顺

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 电气安装工程

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号