历史上的今天
今天是:2025年12月19日(星期五)
2022年12月19日 | 嵌入式ARM系统异常和中断处理知识总结
2022-12-19 来源:zhihu
关于异常处理,分为三部分:
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
...
... 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中恢复出来。
史海拾趣
|
今天早上5点中突然醒了,好像有个概念不知道什么时候出现在我大脑------编译器代码优化。前两天一直解决不了的程序乱跳和代码优化有没有关系,立马翻看工具手册提到了4种代码优化级别,编译器默认最好的优化,最好的优化,是最差的调试视图。我改了 ...… 查看全部问答> |
|
拿到了心仪已久的X86系列的NTC929板子,打开包装,给人的感觉总是那么舒心和愉悦。拿到手了,进行简单测评一下。 本板式一款高性能、低功耗3.5’的嵌入式工业主板,该板采用了Intel Siliverthorn+Poulsbo芯片组,板载IntelSilverthorn(Intel Atom ...… 查看全部问答> |
|
我的WINCE系统 可以PING通局域网内其他PC的IP 但是 连接外网的时候就不行, 我主要是想在局网内打印(特性目录中PCL Print driver添加进去了) ,打印IE浏览器的时候 点 file/print 没反应! 我用的是HP的激光打印机支持PCL的!是不是 ...… 查看全部问答> |
|
程序在WM5.0的设备上运行时,如果菜单项超过两项时,菜单栏的颜色就会变成淡蓝色,而不是原来默认的颜色。 请问有没有办法是菜单栏的颜色不改变或是将菜单栏的颜色设置一下呢?? 用C++… 查看全部问答> |
|
activesync4.2无法通过usb连接pc与wince5.0 我使用致远(周立功) MagicARM2410教学实验开发平台及配套光盘中的wince镜像 按照试验指导书安装evc4.0 及activesync4.2及相关软件 但pc机始终无法使用activesync4.2通过usb与wince建立连接 pc端的activesync4.2会显示正在连接 但约一分钟后 会显 ...… 查看全部问答> |
|
请问:我在运行evc的工程时,提示我说sdk 不能运行在emulator device,这是什么原因呀? 错误为: an application targeting a Standard SDK for Windows CE.NET and built for the MIPSII_FP CPU cannot be run on the Emulator device.In order to run this application on any CPU other than the Emulator,you will have to install ...… 查看全部问答> |
|
用stm32l152芯片控制mma7455l遇到的一个问题! 我使用stm32l152模拟IIC接口控制mma7455l加速的传感器。 iic驱动程序,对加速的传感器的0x16控制寄存器的访问是完全正确,例如先向0x16寄存器写入0x45,然后可以正确的读取到0x45。 但是读取数据寄存器0x06、0x07、0x08和地址寄存器0x0d的时候却不 ...… 查看全部问答> |




