uboot-step 1 设置异常向量表
何为异常
异常是指处理器的正常运行被内部或者外部事件所打断导致处理器去处理这个事件的现象,例如一个外部中断的产生或者是尝试去执行一个未定义的指令等都会产生异常,ARM处理器的异常主要有以下几种:
产生异常做什么
处理器一旦产生了异常,便会去处理这个异常,但是它去哪里去处理这个异常呢,这就是异常向量表的作用了,ARM 公司规定了这些异常的入口地址,如上表所示,当产生异常后,处理器就会去对应的异常地址来执行相关代码去处理异常
由于这些异常地址间隔为4个字节,根本放不下异常的处理代码,因此在每个 地址处放置了一个32位的跳转指令,就形成了异常向量表,ldr指令是将操作数2地址处的值赋给操作数1 , .word 表示占用一个32位的存储区,来存储真正的跳转地址(标号)
.globl _start @定义全局标号
_start: b reset @ 相对跳转
ldr pc, _undefined_instruction @将_undefined_insttuction 地址(标号)处存储的值(也是一个地址,真正的异常处理代码所在)赋给pc指针
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_interrupt:
.word software_interrupt
_prefetch_abort:
.word prefetch_abort
_data_abort:
.word data_abort
_not_used:
.word not_used
_irq:
.word irq
_fiq:
.word fiq
underfined_instruction: xxxx
software_interrupt: xxx
prefetch_abort : xxxx
data_abort : xxxx
not_used: xxx
irq: xxx
fiq: xxx
此去经年
zhaiyk@sina.cn
August 1, 2016