STM32 H7系列Cortex-M MCU链接器对ITCMRAM的分配及定义疑问
STM32 H7系列中ITCMRAM的链接器分配与定义意义
一、怎么把内容分配到ITCMRAM
要让链接器把代码或数据放到ITCMRAM,得在链接脚本的SECTIONS区块里显式指定对应段映射到ITCMRAM区域。举个例子:
如果想把特定函数放到ITCMRAM加速执行,先在链接脚本里加这段:
SECTIONS { .itcm_text : { *(.itcm_text) } > ITCMRAM }
然后在代码里给目标函数加属性修饰,指定它归到这个自定义段:
__attribute__((section(".itcm_text"))) void fast_exec_func(void) { // 这里是需要高速执行的代码 }
要是想把向量表挪到ITCMRAM,也可以在链接脚本里把.isr_vector段分配到ITCMRAM,同时在初始化代码里配置SCB->VTOR寄存器指向对应地址。
二、官方脚本里没引用ITCMRAM,链接器会用它吗?
默认情况下不会。官方提供的链接脚本是通用模板,面向大多数常规项目——ITCMRAM是指令紧耦合内存,专门用来放对执行速度要求极高的代码(比如高频中断服务函数、核心计算循环),不是所有项目都需要这种极致性能优化,所以默认不会把任何内容分配到这里。
三、那为啥要在MEMORY里定义ITCMRAM?
这个定义有几个实际用处:
- 地址空间保护:明确告诉链接器,0x00000000起始的64KB空间是硬件预留的ITCMRAM,避免其他代码段、数据段误占用这个地址范围(毕竟Cortex-M的向量表默认就在0x00000000,就算后来改了向量表位置,也能防止地址冲突)。
- 简化用户定制:当你需要用到ITCMRAM时,不用自己重新编写MEMORY区块的定义,直接在SECTIONS里加段映射就行,省得查手册找地址和大小。
- 硬件资源可视化:让开发者一眼就能从脚本里看到芯片的所有内存资源,和STM32 H7的硬件手册对应上,符合官方固件包的统一模板规范。
内容的提问来源于stack exchange,提问作者SRobertJames
相关产品推荐
相关产品推荐

