(来源于周立功ppt)
进入异常
在异常发生后,ARM7TDMI内核会作以下工作:
1.在适当的LR中保存下一条指令的地址,当异常入口来自:
ARM状态,那么ARM7TDMI将当前指令地址加4或加8复制(取决于异常的类型)到LR中;
为Thumb状态,那么ARM7TDMI将当前指令地址加4或加8 (取决于异常的类型)复制到LR中;异常处理器程序不必确定状态。
2.将CPSR复制到适当的SPSR中;
3. 将CPSR模式位强制设置为与异常类型相对应的值;
4.强制PC从相关的异常向量处取指。
ARM7TDMI内核在中断异常时置位中断禁止标志,这样可以防止不受控制的异常嵌套。
注:异常总是在ARM状态中进行处理。当处理器处于Thumb状态时发生了异常,在异常向量地址装入PC时,会自动切换到ARM状态。
退出异常
当异常结束时,异常处理程序必须:
1.将LR中的值减去偏移量后存入PC,偏移量根据异常的类型而有所不同;
2.将SPSR的值复制回CPSR;
3.清零在入口置位的中断禁止标志。
注:恢复CPSR的动作会将T、F和I位自动恢复为异常发生前的值。
感想:随着嵌入式系统学习的深入,越发觉得异常的重要性,它在各种嵌入式系统的移植过程中起着非常关键的作用。只有彻底弄清除处理器在异常时的动作,才能在移植各种系统时很好的把握设备上下文,不致于使系统环境混乱,给系统安全带来隐患。(完)
文章评论(0条评论)
登录后参与讨论