news 2026/6/1 12:02:44

S32K311启动过程中,向量表重定向

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
S32K311启动过程中,向量表重定向

在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区域的向量表是通过什么方式实现的呢?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/1 6:19:58

告别重复编码!10+顶级开发工具,引爆程序员效率革命

对程序员而言,时间与精力堪称核心资产。但在实际开发场景中,大量工时却被耗费在重复编码、环境搭建、故障调试等低价值事务上。如何摆脱“代码民工”的桎梏,进阶为聚焦核心问题的“解决方案架构师”?答案就藏在各类精心打磨的开发…

作者头像 李华
网站建设 2026/5/29 22:21:22

微信小程序自动化测试——微信小程序云测服务

MiniTest 微信小程序云测服务是一套由微信测试团队自主研发,联合WeTest云真机能力,共同推出的微信小程序自动化测试服务。 服务基于云真机,支持开发者简单快捷地实现小程序智能化Monkey测试,录制回放,自定义测试和性能…

作者头像 李华
网站建设 2026/5/31 3:07:34

TLS网络安全协议巩固知识基础题(2)

1. TLS 1.3 中的 External PSK 和 Resumption PSK 的主要区别是什么? A. External PSK 用于外部预共享密钥,Resumption PSK 用于会话恢复 B. External PSK 更安全,Resumption PSK 更快 C. External PSK 需要手动配置,Resumption PSK 自动生成 D. External PSK 支持 0-RTT,…

作者头像 李华