arm 异常处理结构
概念:正常的程序执行过程中发生暂时的停止称为异常,如果发现异常情况,将会进行异常处理
作用:快速响应用户的行为,提高cpu的响应能力
异常类型:


异常处理的三个步骤:
1、保护现场:
工作模式保存:CPSR-->SPSR(自动完成)自能保存在SPSR中,其他寄存器不行
下一条要执行指令:lr<--pc(自动完成)
数据的保存:STMFD SP!,{R0-R12}(需手动完成)
2、跳到中断处理程序处:PC = 中断处理程序的首地址
3、恢复现场:
sp!-->R0-r12(还原数据)
SPSR-->CPSR(还原工作状态)
pc-->lr-4(pc指向的是正在取指的那条指令,与真正执行的指令相差8字节,与正在译码的指令相差4字节)所以需要减4:参考流水线结构
-----------------------------------------------------------------
具体的操作代码:
IRQ_handle:
LDR SP,=0XD0037180//(指明栈irq栈区的起始地址)memory mmap
SUB LR,LR,#
STMFD SP!,{R0-R12,LR} //防止bl 执行后pc指针被覆盖,将lr放到栈中
BL 真正的中断处理函数,自动返回,恢复pc
LDMFD SP!,{R0-R12,PC}^//加了‘^’表示自动恢复CPSR;

上图为中断向量表:程序员使用的主要是IRQ和FIQ;
fiq快速响应的原因是:
1、优先级比IRQ更高
2、拥有比IRQ更多的独立寄存器
arm 异常处理结构的更多相关文章
- ARM汇编程序结构
ARM汇编程序结构 一个ARM程序可以被划分为多个代码段和数据段,在汇编的时候这些段会被形成一个可执行文件 .text ;正文段,包含程序的指令代码 .data ;数据段,包含固定的数据,如常量,字符 ...
- [Python学习笔记][第八章Python异常处理结构与程序调试]
1/30 第八章Python异常处理结构与程序调试 异常处理 try-except结构 try: try块 except Exception: except块 try-except-else结构 tr ...
- Python_异常处理结构与调试
while True: x =input('Pleaes input:') try: x=int(x) print('You have input {0}'.format(x)) break exce ...
- 四、ARM 异常处理
4.1 模式与异常 当正常程序流程被暂时停止发生异常,例如响应一个来自外设的中断.在处理异常前,必须保护当前的处理器状态,以便在完成处理程序后能恢复到原来的程序 . 异常的类型: Reset unde ...
- 字符设备驱动笔记——中断方式按键驱动之linux异常处理结构(四)
.中断方式获取按键值 单片机: )按键按下 )cup发生中断,跳转到异常向量入口执行 )b 函数 a.保存被中断的现场 b.执行中断处理函数 c.恢复 linux: )trap_init()函数构造异 ...
- ARM 异常处理过程,指令[ swi ]
1. 发生异常: 程序正常执行,突然被一个不正常的事件打断正在执行的程序,执行相应的异常事件对应的程序 2. 5 种异常模式对应着 7 种异常源: 异常工作模式 异常源 FIR ...
- arm: 使用结构体操作寄存器
使用结构体操作寄存器: //寄存器赋值和取值的时候,要注意寄存器的长度,有的寄存器的值只有8位. //还要注意,使用volatile修饰寄存器变量.volatile 参考http://www.cnbl ...
- Windows结构化异常处理浅析
近期一直被一个问题所困扰,就是写出来的程序老是出现无故崩溃,有的地方自己知道可能有问题,但是有的地方又根本没办法知道有什么问题.更苦逼的事情是,我们的程序是需要7x24服务客户,虽然不需要实时精准零差 ...
- SEH:结构化异常处理 学习
SEH:结构化异常处理 结构化异常处理机制提供了一个操作系统,用于优化结构的方案,为客户提供更强大的程序执行环境.试想一下,你写程序不用考虑内存访问错误,那里是空指针错误,一直在按照程序的逻辑结构来写 ...
随机推荐
- Sass嵌套
Sass 中还提供了选择器嵌套功能,但这也并不意味着你在 Sass 中的嵌套是无节制的,因为你嵌套的层级越深,编译出来的 CSS 代码的选择器层级将越深,这往往是大家不愿意看到的一点. 选择器嵌套为样 ...
- 快速搭建appium自动测试环境
首先申明本文是基本于Python与Android来快速搭建Appium自动化测试环境: 主要分为以下几个步骤: 前提条件: 1)安装与配置python环境,打开 Python官网,找到"Do ...
- window下spyder的快捷键
块注释/块反注释 Ctrl + 4/5 断点设置 F12 关闭所有 Ctrl + Shift + W 代码完成 Ctrl +空格键 条件断点 SHIFT + F12 配置 F6 复制 Ctrl + C ...
- Win7如何分享局域网并设置共享文件夹账户和密码
https://jingyan.baidu.com/article/ceb9fb10ddf6c08cad2ba017.html 在办公或者其他场所,我们需要分享自己的文件给朋友或者同事,但又不想同一局 ...
- 把一个DIV放到另一个div右下角
父对象相对定位,子对象以父对象为参考点绝对定位:外层的div设置为相对定位,内层的div设置为绝对定位: <div id="box1"> <div id=&quo ...
- JVM-垃圾收集的过程
JDK1.7 JVM的垃圾收集算法有 1. 标记-清除算法: 2. 复制算法:在商业虚拟机都是使用这种算法来回收新生代的 3. 标记-整理算法: JDK1.7 JVM的垃圾收集器有 1. Serial ...
- Intellij 设置生成serialVersionUID的方法
- 爬取知名社区技术文章_setting_5
# -*- coding: utf-8 -*- # Scrapy settings for JobBole project # # For simplicity, this file contains ...
- Ubuntu 11.10 Server下搭建Maven私服
安装Nexus服务的文档可以参考官方站点:http://www.sonatype.com/books/nexus-book/reference/install-sect-install.html ...
- Git知识总览(四) git分支管理之rebase 以及 cherry-pick相关操作
上篇博客聊了<Git知识总览(三) 分支的创建.删除.切换.合并以及冲突解决>,本篇博客我们主要来看一下 rebase 变基相关的操作.rebase 操作和 merge 操作最终都可以达到 ...