LAT0816
Local Application Tips
LAT0816 – Rev 1.0 – Oct. 2020
STM32CubeIDE 实用技巧之 ld 链接文件
关键字:STM32CubeIDE,链接文件
前言
STM32CubeIDE 是 ST 推出的免费集成编译环境,基于 Eclipse 开源框架,集成了 GCC、GDB 等免费的编译器、链
接器,支持 STM32 全系列芯片,可以创建 C/C++工程,支持调试、波形实时仿真、一键下载等。
在实际项目中,有时候需要对内存进行细分时,比如指定变量/函数/文件到特殊地址等等,KEIL 可以通过“*.sct”文
件来实现;IAR 可以通过“*.icf”文件来实现;对于 STM32CubeIDE,可以通过“*.ld”链接文件来实现。
本文将介绍 GCC 的“*.ld”链接文件的常见用法,供大家参考使用。
基本概念
“*.ld”链接文件组合了许多对象和归档文件,重新定位它们的数据并绑定符号引用。通常,编译程序的最后一步是运
行“*.ld”链接文件。
通俗来讲,链接文件可以描述输入文件中的段,将其映射到输出文件中,并指定输出文件中的内存分配。
以下就是链接文件涉及到的相关概念:
内存(Memory)
语法:
MEMORY
{
name [(attr)] : ORIGIN = origin, LENGTH = len
…
}
注释:这里的“attr”只能由以下特性组成:
‘R’ Read-only section
‘W’ -- Read/write section
‘X’ -- Executable section
‘A’ -- Allocatable section
‘I’ -- Initialized section
‘L’ -- Same as ‘I’
‘!’ -- Invert the sense of any of the attributes that follow
示例:
/* Memories definition */
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000300, LENGTH = 36K
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 128K
}
注释:
“xrw”表示“RAM”区是可读、可写和可执行的,且 RAM 的起始地址为“0x20000000”,长度为 36K。