概念:正常的程序执行过程中发生暂时的停止称为异常,如果发现异常情况,将会进行异常处理

作用:快速响应用户的行为,提高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 异常处理结构的更多相关文章

  1. ARM汇编程序结构

    ARM汇编程序结构 一个ARM程序可以被划分为多个代码段和数据段,在汇编的时候这些段会被形成一个可执行文件 .text ;正文段,包含程序的指令代码 .data ;数据段,包含固定的数据,如常量,字符 ...

  2. [Python学习笔记][第八章Python异常处理结构与程序调试]

    1/30 第八章Python异常处理结构与程序调试 异常处理 try-except结构 try: try块 except Exception: except块 try-except-else结构 tr ...

  3. Python_异常处理结构与调试

    while True: x =input('Pleaes input:') try: x=int(x) print('You have input {0}'.format(x)) break exce ...

  4. 四、ARM 异常处理

    4.1 模式与异常 当正常程序流程被暂时停止发生异常,例如响应一个来自外设的中断.在处理异常前,必须保护当前的处理器状态,以便在完成处理程序后能恢复到原来的程序 . 异常的类型: Reset unde ...

  5. 字符设备驱动笔记——中断方式按键驱动之linux异常处理结构(四)

    .中断方式获取按键值 单片机: )按键按下 )cup发生中断,跳转到异常向量入口执行 )b 函数 a.保存被中断的现场 b.执行中断处理函数 c.恢复 linux: )trap_init()函数构造异 ...

  6. ARM 异常处理过程,指令[ swi ]

    1.  发生异常: 程序正常执行,突然被一个不正常的事件打断正在执行的程序,执行相应的异常事件对应的程序 2.  5 种异常模式对应着 7 种异常源:   异常工作模式      异常源 FIR   ...

  7. arm: 使用结构体操作寄存器

    使用结构体操作寄存器: //寄存器赋值和取值的时候,要注意寄存器的长度,有的寄存器的值只有8位. //还要注意,使用volatile修饰寄存器变量.volatile 参考http://www.cnbl ...

  8. Windows结构化异常处理浅析

    近期一直被一个问题所困扰,就是写出来的程序老是出现无故崩溃,有的地方自己知道可能有问题,但是有的地方又根本没办法知道有什么问题.更苦逼的事情是,我们的程序是需要7x24服务客户,虽然不需要实时精准零差 ...

  9. SEH:结构化异常处理 学习

    SEH:结构化异常处理 结构化异常处理机制提供了一个操作系统,用于优化结构的方案,为客户提供更强大的程序执行环境.试想一下,你写程序不用考虑内存访问错误,那里是空指针错误,一直在按照程序的逻辑结构来写 ...

随机推荐

  1. 97、爬虫框架scrapy

    本篇导航: 介绍与安装 命令行工具 项目结构以及爬虫应用简介 Spiders 其它介绍 爬取亚马逊商品信息   一.介绍与安装 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, ...

  2. Angular(2+) 国际化方案(ngx-translate)

    本文只针对ngx-translate/core 6.x版本,如果你使用的是5.x或者更低的版本,请参照以下链接. https://github.com/ngx-translate/core/blob/ ...

  3. phpstorm(或webstorm) 打开后 一直停留在scanning files to index....,或跳出内存不够的提示框

    记得3月份做项目时就遇到过这个问题,当时解决的 ,但是忘记怎么解决的啦,所以 ,写博文是多么的重要啊. 说明: 在npm install 后,会出现Scanning files to index .. ...

  4. PHP和Python如何选择?或许可以考虑这三个问题

    撤稿纠错 文/黄小天.李亚洲 (选自Hackernoon 机器之心编译) 2017 年可谓是网页应用与 API 之年,开发者不用每次重新发明轮子,而是利用脚手架和第三方库就能确保项目在几天内实时部署. ...

  5. Asp.net mvc 中的 Controller 的激活

    Controller 激活是指根据路由系统解析出来的 Controller 的名称创建 控制器(Controller)的过程,这里的控制器泛指实现了 IController 接口的类型 激活过程中的核 ...

  6. 【绘图技巧】ps快捷键的用法

    Ctrl+N:新建画布          Ctrl+O:打开对话框 F: 在三种画布中切换 Z:缩放工具(临时)      Ctrl+0:满画面显示 空格:切换到手(临时) Ctrl+":网 ...

  7. Hadoop集群的JobHistoryServer详解(转载)

    Hadoop自带了一个历史服务器,可以通过历史服务器查看已经运行完的Mapreduce作业记录,比如用了多少个Map.用了多少个Reduce.作业提交时间.作业启动时间.作业完成时间等信息.默认情况下 ...

  8. linux中操作java进程

    通过 ps -ef|grep java 来得到真正运行的线程 通过kill -9 XXXXX来杀死正在运行的线程,其中XXXXX是上面java线程的序号. 另外还有2个指令我也不熟悉,一个是cat,一 ...

  9. vim 实用配置

    修改文件~/.vimrc 如下: set nu " 显示行号colorscheme torte " 设定配色方案set tabstop=4 " 设定 tab 长度为 4s ...

  10. 【转】fread函数详解

    “fread”以二进制形式,从文件读出数据. 语法1:[a,count]=fread(fid,size,precision) 语法2:[a,count]=fread(fid,size,precisio ...