关于异常处理,分为三部分:

1. ARM异常和模式:core处理异常时的操作,几种模式介绍。
2. Vector table:
3. 异常优先级
4. lr偏移:几种异常如何返回

异常和中断处理简介

在嵌入式系统中异常处理是核心之一。高效的处理能够极大的提升系统的性能。
ARM处理器一共有7种可以暂停指令的执行序列的异常。
主要分为三个部分:

点击这里1小时彻底掌握中断 创客学院带你搞定异常和中断处理

1. Exception handling
2. Interrupts
3. Interrupt handling schemes
今天我们主要介绍第一部分

Exception Handling

1.ARM Processor Exceptions And Modes

任何一种中断模式都可以通过手动的修改cpsr的值来进入。但是User和System模式是仅有的2个不能由相应中断进入的模式,换句话说,我们必须要通过手动修改cpsr才能进入。

当一个异常产生的时候,core会自动进行如下4步:
1. saves the cpsr to the spsr of the exception mode
2. saves the pc to the lr of the exception mode
3. sets the cpsr to the exception mode
4. sets the pc to the address of the exception handler

需要注意的是,当异常产生的时候,ARM处理器总是会切换到ARM状态。

2.Vector Table

handler定位在相应内存位置中,如下图的IRQ,FIQ

0x00000018: 0xe59ffa38 IRQ ; ldr pc, [pc, #irq]
0x0000001c: 0xe59ffa38 FIQ ; ldr pc, [pc, #fiq]

3.Exception Priorities

4.Link Register Offset

如下三种从IRQ和FIQ异常处理返回的例子

例1:

handler

...

SUBS pc, r14, #4 ;pc = r14 -4

因为SUB后的S和pc作为目标寄存器,cpsr的值会自动从spsr中恢复出来

例2:

handler

SUB r14, r14, #4 ;r14 -= 4

...

<code>

...

MOVS pc, r14

r14 = r14 -4, pc = r14 , cpsr =spsr(因为S)

例3:

handler

SUB r14, r14, #4 ; r14 = r14 - 4

STMFD r13!, {r0-r3, r14} ;store context

...

LDMFD r13!, {r0-r3, r14}^ ;return

STMFD,LDMFD 分别提供了pop/push的功能。STMFD sp!, {r0-r3, r14}就是依次将r14, r3, r2, r1放入栈中。LDMFD r13!, {r0-r3, r14}^则依次反向取出。^ 这个符号,则强制cpsr从spsr中恢复出来。

arm中断保护和恢复_嵌入式ARM系统异常和中断处理知识总结相关推荐

  1. arm中断保护和恢复_浅谈ARM处理器的七种异常处理

    昨天的文章,我们谈了ARM处理器的七种运行模式,分别是:用户模式User(usr),系统模式System(sys),快速中断模式(fiq),管理模式Supervisor(svc),外部中断模式(irq ...

  2. arm中断保护和恢复_ARM中断返回的详细分析

    原标题:ARM中断返回的详细分析 在ARM体系中,通常有以下3种方式控制程序的执行流程: 1.在正常执行过程中,每执行一条ARM指令,程序计数器PC的值加4个字节:每执行一条Thumb指令,程序计数器 ...

  3. arm中断保护和恢复_ARM异常中断的原因及处理措施

    当ARM异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行.当异常中断处理程序执行完成后,程序返回到发生中断指令的下条指令处执 行.在进入异常中断处理程序时,要保存被中断程序的 ...

  4. 嵌入式ARM系统异常和中断处理知识总结

    关于异常处理,分为三部分: ARM异常和模式:core处理异常时的操作,几种模式介绍. Vector table: 异常优先级 lr偏移:几种异常如何返回 异常和中断处理简介 在嵌入式系统中异常处理是 ...

  5. arm中断保护和恢复_ARM中断异常处理的返回

    举个小例子,下面是一段ARM汇编代码: 地址 指令 0x3000 BL add 0x3004 MOV r0,#0 0x3008 MOV r1,#1 0x300C MOV r2,#2 AREA test ...

  6. arm中断保护和恢复_ARM的中断处理详细过程

    ARM有七种异常中断类型,优先级.工作模式(有七种工作模式).地址.功能都不一样.如其中软件中断SWI优先级为6,工作模式管理模式,异常向量地址为0x00000008,功能是用户定义的中断指令,可用于 ...

  7. arm中断保护和恢复_ARM中断处理过程

    以s3c2440 ARM9核为例: 一:s3c2440 ARM处理器特性: 1.S3C2440支持60个中断源,含子中断源: 2.ARM9采用五级流水线方式: 3.支持外部中断和内部中断: 二.s3c ...

  8. fiq中断的入口地址_嵌入式技巧:ARM的三种中断调试方法介绍

    嵌入式软件开发流程 参照嵌入式软件的开发流程.第一步:工程建立和配置.第二步:编辑源文件.第三步:工程编译和链接.第四步:软件的调试.第五步:执行文件的固化. 在整个流程中,用户首先需要建立工程并对工 ...

  9. 外网访问arm嵌入式linux系统_嵌入式Linux系统移植的四大步骤

    最近在学习系统移植的相关知识,在学习和调试过程中,发现了很多问题,也解决了很多问题,但总是对于我们的开发结果有一种莫名其妙的感觉,纠其原因,主要对于我们的开发环境没有一个深刻的认识,有时候几个简单的命 ...

最新文章

  1. Spring 实践 -IoC
  2. c#数组赋初值_JavaScript数组的声明、访问和遍历方法
  3. mysql存储过程-汇总学习
  4. Apache Shiro 1.6.0 发布!修复绕过授权高危漏洞
  5. 转 linux常用查看硬件设备信息命令
  6. java集成redis集群_spring集成redis cluster详解
  7. URAL 1091. Tmutarakan Exams
  8. pandas 把某一列中字符串变数值_Python学习教程:Python数据分析实战基础 | 初识Pandas...
  9. 1064金明的预算方案
  10. 用AI帮你画新年贺卡:只需输入几个单词,就能模仿大师名作
  11. 苹果Mac如何显示隐藏文件?
  12. spring mvc 的上传图片是怎么实现的?
  13. 装备制造业包括哪些行业(装备制造业行业分类目录)
  14. NS3000 电子海图长江导航应用分析
  15. 4836: [Lydsy1704月赛]二元运算(cdq分治 FFT)
  16. AI转型中的思考和洞见
  17. Word模板生成C#源码
  18. 使用路由器上网微信qq绝地求生腾讯系打开慢或打不开的问题
  19. 塑料壳上下扣合的卡扣设计_一种组合玩具的塑料卡扣的制作方法
  20. C++成员变量指针和成员函数指针

热门文章

  1. Facebook陷入史上最大危机;华为5G设备欧洲大卖,美国指责欧盟;红帽宣布OpenShift可用于AWS中国……...
  2. 备战双 11!蚂蚁金服万级规模 K8s 集群管理系统如何设计?
  3. 【当头棒喝】你是真的了解云计算吗?
  4. kafka系统设计开篇
  5. 要闻君说:谷歌云重磅发布两大技术平台;以后可以打飞滴了?SAP重组动荡;微软宣布 Azure Functions 支持 Java...
  6. 阿里带火的中台,究竟是个啥?
  7. es6 箭头函数 rest参数 扩展运算符
  8. linux内核关掉模块,强制关闭你的系统的内核模块 | Linux 中国
  9. php自定义函数参数,php自定义函数的参数
  10. 工业互联网标识解析企业节点_丰尚公司获批建设国家工业互联网标识解析二级节点...