对IA32(X86)而言,当发现异常时,CPU硬件做了很多事情,比如切换 SP,CR3,CS等等(读取TSS),而对于ARM来说,处理的流程如下
CPU 硬件:
<1> : 将发生异常的下一条指令保存至 LR_xxx
<2> : 备份当前 CPSR 到该模式的 SPSR_xxx
<3> : 重置修改 CPSR,强制进入 相应的模式,强制进入ARM模式,关闭 FIQ/IRQ 响应
<4> : 修改PC = (reset = 0/0xFFFF0000,undef = 4/0xFFFF0004...... )
OS(软件)
<1> : 切换 sp
<2> : 保存上下文 {r0-r12,sp}
<3> : 执行处理函数
<4> : 执行函数返回
<4> : 恢复上下文{r0-r12,sp}
<5> : 恢复 SPSR_xxx,到 CPSR
<6> : 从 LR_XX恢复到 PC
关键字:arm 硬件 软件 异常
引用地址:
arm 硬件和软件对异常的处理
推荐阅读最新更新时间:2026-03-24 10:31
基于ARM7的蓝牙接入点的硬件系统结构和软件流程
1引言 在工业现场中,由于有些环境比较恶劣,布线不方便等因素可以采用蓝牙无线通信技术来实现数据的通信。同时,工业现场中有很多以不同方式互连的设备,其中包括非智能化简单数据连接单元 (I/O)、智能化设备 (比如智能传感器、单回路控制器和 PLC)和监控系统 (作为 HMI使用,用于数据记录和监控 )等。这些设备大都是以各种不同的通信协议和媒介来互连的,其中有些就可以用蓝牙无线技术代替。本文以 AT91R40008为例,结合 BCM04蓝牙模块开发了基于蓝牙通信的工业接入点,组建了基于蓝牙通信的阀门、流量计、温度变送器测试系统,实现了带有蓝牙通信模块的工业设备和现有的有线网路的通信。 2蓝牙技术简介 蓝牙(b
[单片机]
第11章 STM32F429移植SEGGER的硬件异常分析
11.1 初学者重要提示 MDK本身也是支持硬件异常分析的,就是不够直观,此贴是MDK的硬件异常分析文档:http://www.armbbs.cn/forum.php?mod=viewthread&tid=21940 。 IAR8带的硬件异常分析比较好用,在本章11.6小节有说明。 11.2 移植方法 直接移植SEGGER的硬件异常代码会有错误警告,这里针对IAR和MDK版本做了些简单修改,方便大家移植到自己的工程里面。 MDK版本移植 源文件位于本章配套例子的UserseggerHardFaultHandlerMDK文件夹,添加如下两个文件到工程里面即可。 IAR版本移植 源文件位于本章配套例子的Userseg
[单片机]
ARM的异常处理方式介绍
一、什么是异常: 1、正常工作之外的流程都叫异常。 2、异常会打断正在执行的工作,并且我们一般希望异常处理完成后继续回来执行原来的工作。 3、中断是异常的一种。 二、用户态、系统态、异常态 1、用户态和系统态是正常模式。 (1)、用户态:用户(建立在操作系统之上)执行的是进程。 (2)、系统态:运行的是操作系统内核所做的事情。 2、异常态(正常异常:打电话叫人打断别人正在做的事情。真正的异常:地震打断正在做的事情): (1)、FIQ、IRQ执行中断处理。 (2)、supervisor软件中断:使用软件制造中断是中断的一种。(上电开机或电脑休眠重启)。 (3)、Abort、undef这两是真正的异常,如Abort内存存储时异常。
[单片机]
ARM处理器架构-----异常/中断处理
中断是我们嵌入式开发很常用到的一种资源和编程手段。这篇文章重点分析arm的中断处理流程。 首先,中断是异常的一种。当发生一种异常时,处理器会进入不同的工作模式。ARM的异常和相应的模式之间的对应关系见下表: 当一个异常导致模式的改变时,ARM核自动地: 1、把cpsr保存到相应模式下的spsr 2、把pc保存到相应模式下的lr 3、设置cpsr为相应异常模式 4、设置pc为相应异常处理程序的入口地址 对于IRQ或者FIQ而言,还多一项变化:禁用相关的中断IRQ或FIQ,禁止同类型的其他中断被触发。(这也是自动实现的,因此正常情况下,ARM中断不可嵌套) 从异常中断处理程序退出时,需要我们在程序中用软
[单片机]
ARM未定义指令异常学习中关于字节对齐的心得
今天学习jz2440开发板的未定义指令异常这一节课程,跟随韦东山老师编写代码编译烧写后程序老师无法正常运行,经过仔细排查发现是字节未4字节对齐导致的,之前的程序中start.S文件如下开始: _start: /* 关闭看门狗 */ ldr r0, =0x53000000 ldr r1, =0 str r1, 指令从开始就是按照4字节对齐排放的,这样运行程序没有问题。但当在_start标签后增加未定义指令异常处理语句后,代码如下: _start: b reset b do_und do_und: ldr sp, =0x34000000 stmdb sp!, {r0
[单片机]
S3c2440ARM异常与中断体系详解2---CPU模式(Mode)状态(State)
这节课我们来讲CPU的工作模式(Mode) 状态(State)寄存器 7种Mode: usr(用户模式) sys(系统模式) undefined(und)(未定义模式) Supervisor(svc)(管理者模式) Abort(abt)(中止模式) IRQ(irq)(中断模式) FIQ(fiq)(快速中断模式) 2种State: ARM state Thumb state 寄存器: 通用寄存器 备份寄存器(banked register) 当前程序状态寄存器(Current Program Status Register);CPSR CPSR的备份寄存器:SPSR(Save Program Statu
[单片机]
S3c2440ARM异常与中断体系详解1---概念引入与处理流程
取个场景解释中断。 假设有个大房间里面有小房间,婴儿正在睡觉,他的妈妈在外面看书。 问:这个母亲怎么才能知道这个小孩醒? 过一会打开一次房门,看婴儿是否睡醒,让后接着看书 一直等到婴儿发出声音以后再过去查看,期间都在读书 第一种 叫做查询方式: *优点:简单 *缺点: 累 写程序如何: while(1) { 1 read book(读书) 2 open door(开门) if(睡) return(read book) else 照顾小孩 } 第二种叫中断方式: 优点:不累 缺点:复杂 写程序: while(1) { read book 中断服务程序()//如何
[单片机]
S3c2440ARM异常与中断体系详解4---_und异常模示程序示例
1、异常向量表 /******下面这些就是异常向量表*****/ .globl _start _start: b reset ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort ldr pc, _data_abort ldr pc, _not_used ldr pc, _irq ldr pc, _fiq _undefined_instruction: .word undefined_instruction _software_inte
[单片机]