STMCU小助手
发布时间:2022-8-7 13:59
|
前言 ! w7 e, n% T8 p7 S& s. W STM32CubeIDE 是 ST 推出的免费集成编译环境,基于 Eclipse 开源框架,集成了 GCC、GDB 等免费的编译器、链接器,支持 STM32 全系列芯片,可以创建 C/C++工程,支持调试、波形实时仿真、一键下载等。 在实际项目中,有时候需要对内存进行细分时,比如指定变量/函数/文件到特殊地址等等,KEIL 可以通过“*.sct”文件来实现;IAR 可以通过“*.icf”文件来实现;对于 STM32CubeIDE,可以通过“*.ld”链接文件来实现。 本文将介绍 GCC 的“*.ld”链接文件的常见用法,供大家参考使用。 基本概念 “*.ld”链接文件组合了许多对象和归档文件,重新定位它们的数据并绑定符号引用。通常,编译程序的最后一步是运行“*.ld”链接文件。 通俗来讲,链接文件可以描述输入文件中的段,将其映射到输出文件中,并指定输出文件中的内存分配。- p z9 Y% ]3 ~& v' e) y d 以下就是链接文件涉及到的相关概念:3 q: p0 x I+ k+ O D. { 8 n, z" i& V( B1 ^$ D8 S9 M. d ~ 内存(Memory) : F; S7 ^$ F$ v$ o4 O3 X& ^4 x 语法:
注释:这里的“attr”只能由以下特性组成: : I/ ~' k; d# p6 ~$ W. D2 q ‘R’ Read-only section5 f" i) R* H* l/ n. ]8 T ‘W’ -- Read/write section ‘X’ -- Executable section: z6 M1 B) \. D3 `4 m ‘A’ -- Allocatable section2 C ~8 g P C3 L2 @. K' U2 X2 O ‘I’ -- Initialized section. Z$ l- ?# @$ h6 T3 N ‘L’ -- Same as ‘I’ ‘!’ -- Invert the sense of any of the attributes that follow2 c8 _% p: N( q& _$ R6 m* n5 w ) ^: w6 ~6 W1 A3 _" Q7 E9 f 示例:" @! v- o3 c" E- D( U7 [3 F
注释: “xrw”表示“RAM”区是可读、可写和可执行的,且 RAM 的起始地址为“0x20000000”,长度为 36K。 “rx”表示“FLASH”区是可读和可执行的,FLASH 的起始地址为“0x08000000”,长度为 128K。 段(Section) 2 N0 m: @" S- }$ A Section 有 loadable(可加载) 和 allocatable(可分配)两种类型。不可加载也不可分配的内存段,通常包含某些调试信息。! E/ Q H+ R/ }1 s H loadable(可加载)是指:程序运行时,该段内容应该被加载到内存中。 / B% s' S& y; Z r# U. | allocatable(可分配)是指:该段的内容应该被预留出,但不应该加载任何别的内容(某些情况下,这些内存必须归零)。 “可加载”和“可分配”的 section 都有两个地址:“VMA”和“LMA”。0 G4 r. ?, r4 f# _, M VMA(the virtual memory address):这是运行输出文件时,该 section 的地址。VMA 是可选项,可以不设置。7 M& l: V8 o% N( l- { LMA(load memory address):这是加载 section 时的地址。2 @* \7 i. J* h/ N5 | 在大多数情况下,这两个地址是相同的。当然也可以不相等,比如下面的例子就是 LMA 和 VMA 不同的案例:数据段被加载到 ROM 中,然后在程序启动时复制到 RAM 中(通常用于初始化全局变量)。此时 ROM 地址就是LMA,RAM 地址就是 VMA。 语法:3 g7 K) A8 U5 f5 _" y8 G: H3 _6 M
注释:大多数的段仅使用了上述的一部分属性。" @% ^8 ~) ~- a8 C % T# f+ M* K" x/ `' F& M( a+ y! J 示例:; ? M" ~5 v! [% w2 C! O- k
注释:上述示例中“.isr_vector”的 LMA 与 VMA 是相等的。“! z% y# q% K# ]) g' L- @ .data”因为有“>RAM AT> FLASH”的修饰,表示.data 段的 VMA 为 RAM,LMA 为 FLASH。即.data 段的内容会放在 FLASH 中,但是运行时,会加载到 RAM 中。 : ]9 q) v; Q" F+ F v 完整版请查看:附件 B& z* b- F. [# b4 }6 m( {0 @0 r # a4 ]6 E! C9 b0 ~' j) i6 ` |
LAT0816_STM32CubeIDE实用技巧之ld链接文件_v1.0.pdf
下载398.99 KB, 下载次数: 79
【STM32H5 评测】基础硬件加密与随机数性能 - STM32H5E5实测硬件AES加解密、HASH运算、TRNG真随机数输出速率与稳定性
【STM32H5 评测】NUCLEO-H5E5ZJ 使用 TrustZone 安全分区系统实践测试
【STM32H5 评测】CPU核心性能 - STM32H5E5跑 RTOS,观察任务切换速度、中断响应快慢
【STM32H5 评测】内存读写性能 - STM32H5E5实测Flash,SRAM读写速度,用DMA搬运大块数据
【NUCLEO-C562RE】OLED 显示
保姆级教程:CMake 工程导入 STM32CubeIDE 步骤
STM32CubeCLT 1.22.0新版本发布
【下载问题解决】关于ST官网下载软件问题解决
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
微信公众号
手机版