Rust与Android NDK集成实战指南
2026/7/18 8:32:14
在MCU的启动过程中,NXP官方提供的启动代码会对中断向量表进行重定向,将向量表从flash定向到ram。具体实现分析如下。
通过这个命令,声明一个.intvec的段,这条指令下面申明的变量都存放在这个段中。
VTABLE是一个内存地址符号(Label),它代表.intvec段的起始位置。
所以,这里就有了.intvec这个段,并且这个段中存放的是中断向量表的地址。而且我们可以通过VTABLE来找到这个段的首地址。
define block intcVectorBlock with fixed order, alignment = 2048 { section .intvec };
place in int_dtcm_region { first block intcVectorBlock, block dataDtcmBlock, block bssDtcmBlock};
通过这两行代码,将.intvec段放在DTCM区域的最开始位置。
SetVTOR:
/* relocate vector table to RAM */
LDR R0, =VTOR_REG
LDR R1, =VTABLE
STR R1,[R0]
这里通过VTABLE将向量表(ram区域向量表)的首地址给到SCB.VTOR,实现了向量表的重定位。
到这里问题来了,存放在flash区域的向量表是通过什么方式实现的呢?