中断向量表的位置
在上述中,我们说中断向量表中的第一项存的是栈顶地址,第二项存放的是复位的异常向量,那这一整个的中断向量表存放在哪里呢?实际上是对于不同的程序而言,可能存在数量不等的中断向量表,也就是说中断向量表的位置是可进行重定向的。
在通常情况下,我们将程序烧录到内部 FLASH 中,Flash 中的首地址是 0x0800 0000,那么中断向量表的位置如下所示:
如果我们的系统需要升级,那么在内部 Flash 中就被划分为两个部分,一个是 bootloader,一个是 APP,那么这个时候就需要两个中断向量表,中断向量表的位置如图所示:
在上图所示中,中断向量表存放到 APP 程序段的这个过程也被称之为向量表的重定向,在 STM32F103 中是这样子实现的:
NVIC_SetVectorTable(NVIC_VectTab_FLASH, offset);
上述中的 NVIC_VectTab_FLASH为 0x0800 0000,offset为中断向量表在此基础上的偏移。
|