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

作用:快速响应用户的行为,提高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. jquery ajax 请求中多出现一次OPTIONS请求及其解决办法

    http://www.tangshuang.net/2271.html 在上一篇<服务端php解决jquery ajax跨域请求restful api问题及实践>中,我简单介绍了如何通过服 ...

  2. 图文教程:在Mac上搭建Titanium的iOS开发环境

    http://mobile.51cto.com/web-317170_all.htm 跨平台开发工具Titanium的兴起之路:HTML 5是最大威胁 比较Titanium和PhoneGap两大iOS ...

  3. “Project 'MyFunProject' is not a J2SE 5.0 compliant project.”

  4. ImmutableMap

    不可变集合,为什么使用它呢?线程安全\更有效的利用内存\可作为常量 ImmutableMap.<String, Object> builder().put("yananList& ...

  5. 无废话XML--XML约束(schema)

    Schema  的由来 DTD 作为 XML 1.0 规范的重要组成部分, 对于 XML 文档的结构起到很好的描述作用. 但是,它也具有一些缺点,比如,它采用了非 XML 的语法规则.不支持数据类型. ...

  6. VAssistX插件

    一.什么是VassistX? VassistX的全称是Visual Assist X,是whole tomato开发的一个非常好用的插件,可用于VC6.0及Visual Studio的各个版本(包括V ...

  7. linux(ubuntu或Deepin等)+win7双系统升级win10出现grub解决办法

    1,set root=(hd0,msdos11) 2,set prefix=(hd0,msdos11)/boot/grub 3,insmod /boot/grub/i386-pc/normal.mod ...

  8. 【转】linux shell ${}简单用法

    为了完整起见,我这里再用一些例子加以说明 ${ } 的一些特异功能: 假设我们定义了一个变量为: file=/dir1/dir2/dir3/my.file.txt 我们可以用 ${ } 分别替换获得不 ...

  9. iometer测试工具

    简介 Iometer 为计算机I/O子系统所作的工作就如同测力计为引擎所作的工作一样:它测定在可控制的负荷下系统的性能.Iometer 以前被称为"伽利略". Iometer 既是 ...

  10. C#面向对象方式设置、读取应用配置

    关注点: 1.用面向对象方式的方式(get,set)访问和设置配置项 2.“CallerMemberName”在.net 4以下的变通方式 最后一周了,大伙都进入过年模式了.身还在,心已远.最近事情不 ...