arm 异常处理结构

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

作用:快速响应用户的行为,提高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,#4
    STMFD SP!,{R0-R12,LR}  //防止bl 执行后pc指针被覆盖,将lr放到栈中
    BL 真正的中断处理函数,自动返回,恢复pc
    LDMFD SP!,{R0-R12,PC}^//加了‘^’表示自动恢复CPSR;
    

上图为中断向量表:程序员使用的主要是IRQ和FIQ;

fiq快速响应的原因是:

1、优先级比IRQ更高

2、拥有比IRQ更多的独立寄存器

原文地址:https://www.cnblogs.com/defen/p/5384094.html