一. 为什么会发生und异常:
ARM内核的CPU当执行到了一条无法识别机器的
机器码时,会产生und异常。
二. 发生und异常时硬件会做哪些工作:
1, 将CPSR寄存器的值存入SPSR_und中;
2, 将产生und异常指令的下一条指令的地址存入LR_und寄存器中;
3, 改变CPSR的M4-M0位,使CPU进入und模式;
4, 跳转到地址为0x00000004执行命令。
三. 在软件设计中应该如何处理und异常:
1, 刚进入und处理代码时,考虑到可能会调用C函数,故应首先初始化SP_und,使其指向一段有效的空间
2, 在处理und异常时可能改变r0-r12与LR_und的值,所以应该把r0-r12以及LR_und的值入栈;
stmdb sp!, {r0-r12, lr}
3, 相应的处理异常代码;
4,退出异常处理代码返回原程序以及被异常打断前的模式。
ldmai sp!, {r0-r12, pc}^