tiny6410裸机实验第7章--------------异常(原理)
来源:互联网 发布:淘宝买东西到国外 编辑:程序博客网 时间:2024/05/21 11:22
【说明】
如果我们的CPU执行到未定义的指令的时候会发生什么呢?又,如果出现了除以0的操作,又会发生什么呢?那就是“异常”,这一节就来介绍异常的相关知识。。下一章我们介绍中断,中断是异常的一种。
【工作模式】
ARM有7种工作模式,当发生异常时会自动进入相关的模式运行,并跳转到异常向量入口处,工作模式如下
1)从上看到,系统模式和用户模式使用相同的寄存器
2)快中断模式中使用自己的R8到R12寄存器
3)除了系统和用户模式,其他模式都有自己的R13,R14寄存器以及SPSR寄存器!
【异常向量入口】
我们说当发生异常的时候,CPU会自动跳到异常入口地址去运行,那这个异常入口地址在哪呢?
异常入口地址是ARM规定的,比如复位异常reset 就放在0地址,这样我们一复位,CPU就跳到0地址运行。其他的如下
1)显然,异常向量入口就是在程序的最前面。根据ARM体系的规定,相应的异常会跳到相应的异常入口。我们就在那放相应的指令
2)每一条都是改变PC,也就是无条件跳转。。。。我们将真正的异常处理函数写在任何地方,在入口处跳转过去。。
3)比如swi在这里
【程序状态寄存器】
我们能否手动改变运行模式呢,可以的!运行模式保存在一个CPSR寄存器中,直接改变相应位就可以改变运行模式了。
最后5位就是用来改变运行模式的,而指令执行后的结果放在前面4位,比如CMP指令比较结果就放在这4位。。
下表是工作模式对应的编号,只要直接改写CPSR低5位到相应的编号就可以改变工作模式
【如何改变CPSR】
我们说改变CPSR就可以改变运行模式,但是要如何改变CPSR呢?要改变CPSR要使用特殊的指令,而不是一般的寄存器操作指令,如下
1)MRS 意思就是将CPSR 的值赋 给R0寄存器,
2)然后将R0后低5位设置成10000,由上面的表我们知道是用户模式,
3)MSR就是将寄存器的值赋给CPSR
【SWI指令】
SWI指令可以使系统发生SWI异常,进入管理模式并跳转到相应的异常入口运行
操作系统中用这条指令来进行系统调用
1】硬件会干下面几件事情
1)CPU进入SVC模式
2)CPSR赋给SPSR_SVC
3)切换R13,R14到SVC的R13, R14
4)SWI指令的下一条指令地址保存到R14
5)跳到地址8(异常入口地址)运行
2】软件要干
1)在地址8放一条跳转指令
2)保存现场
3)处理异常
4)恢复现场
- tiny6410裸机实验第7章--------------异常(原理)
- tiny6410裸机实验第7章--------------异常(代码)
- tiny6410裸机实验第4章--------------UART(原理分析)
- tiny6410裸机实验第5章--------------DDR(初始化原理)
- tiny6410裸机实验第6章--------------NAND(初始化原理)
- tiny6410裸机实验第4章--------------UART(原理分析)
- tiny6410裸机实验第5章--------------DDR(初始化原理)
- tiny6410裸机实验第6章--------------NAND(初始化原理)
- tiny6410裸机实验第2章--------------点亮LED灯(原理和代码分析)
- tiny6410裸机实验第8章--------------中断(原理及代码)
- tiny6410裸机实验第9章--------------LCD(原理及源代码)
- tiny6410裸机实验第10章--------------PWM定时器(原理及代码)
- tiny6410裸机实验第11章--------------蜂鸣器(原理及代码)
- tiny6410裸机实验第4章--------------UART(源代码分析)
- tiny6410裸机实验第4章--------------UART(printf, scanf)
- tiny6410裸机实验第5章--------------DDR(链接脚本)
- tiny6410裸机实验第5章--------------DDR(代码)
- tiny6410裸机实验第9章--------------LCD(显示字母)
- 中科院计算所职业培训中心二季度课程安排
- 如何加快C++代码的编译速度
- 如何设置Tomcat的JVM虚拟机内存大小 - Java技术 程序员之家论坛
- Spring -- aop, 用Aspectj进行AOP开发
- 推荐系统开源软件列表汇总和评点
- tiny6410裸机实验第7章--------------异常(原理)
- 20140306
- 自定义notification view
- 关于类型转换
- javascript入门一
- 20140306的今天
- [Unity3D]Script 脚本所有编译器属性详解
- 保健品消费者需求调查方案
- CheckBox 的 checked & unchecked