S32K311启动过程中,向量表重定向
2026/7/17 19:49:29 网站建设 项目流程

在MCU的启动过程中,NXP官方提供的启动代码会对中断向量表进行重定向,将向量表从flash定向到ram。具体实现分析如下。

Vector_Table.s

  • SECTION .intvec:DATA:ROOT(2)

通过这个命令,声明一个.intvec的段,这条指令下面申明的变量都存放在这个段中。

  • VTABLE
    DCD __Stack_dtcm_start /* Top of Stack for Initial Stack Pointer */
    #ifdef MCAL_TESTING_ENVIRONMENT
    DCD _core_loop
    #else
    DCD Reset_Handler /* Reset Handler */
    #endif
    DCD NMI_Handler /* NMI Handler */
    DCD HardFault_Handler /* Hard Fault Handler */
    ......

VTABLE是一个内存地址符号(Label),它代表.intvec段的起始位置。

所以,这里就有了.intvec这个段,并且这个段中存放的是中断向量表的地址。而且我们可以通过VTABLE来找到这个段的首地址。

linker_flash_s32k311.icf

define block intcVectorBlock with fixed order, alignment = 2048 { section .intvec };

place in int_dtcm_region { first block intcVectorBlock, block dataDtcmBlock, block bssDtcmBlock};

通过这两行代码,将.intvec段放在DTCM区域的最开始位置。

startup_cm7.s

SetVTOR:
/* relocate vector table to RAM */
LDR R0, =VTOR_REG
LDR R1, =VTABLE
STR R1,[R0]

这里通过VTABLE将向量表(ram区域向量表)的首地址给到SCB.VTOR,实现了向量表的重定位。

到这里问题来了,存放在flash区域的向量表是通过什么方式实现的呢?

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询