STMCU小助手
发布时间:2022-8-7 17:08
|
1. 概述 越来越多的客户在使用 STM32CubeIDE 作为集成开发工具。STM32CubeIDE 在编译代码的时候,用到了链接脚本。通常情况下,STM32CubeIDE 会自动生成默认的链接脚本。但是有些情况下,例如,用户程序需要定义一些特别的段来放置代码或者数据的时候,我们就需要修改链接脚本文件。5 Z* r b j# C1 t 最近有客户在修改链接脚本后,编译没有出现问题。但是编译之后生成的 BIN 文件很大,导致无法烧录到 Flash 中。结合这个问题,本文详细分析一下它的原因以及解决办法。( @# ?2 _0 M' v' b0 F# B7 ?# P 2. 问题描述( y7 x* t l6 }$ p- L7 t7 f 使用 STM32CubeIDE 创建工程的时候,在项目工程目录文件夹下生成后缀为 ld 的链接脚本文件,程序的编译和链接都会依赖链接脚本文件。如下图所示,STM32H743VIT6 的 RAM 空间被包含 6 块,每块 RAM 的起始地址是独立的,如果客户需要把指定特定的 RAM 区域放置数据或者代码的时候,需要手动修改链接脚本文件。 . k$ u) O# e, I$ v! d% D, R5 d X5 B+ V/ V9 O/ w7 h" a- I
" c+ w% s u$ `2 `0 H" L 客户在使用 STM32H743VIT6 进行应用开发的时候,需要在 0x24000000 以及0x30000000 的 RAM 空间定义两个未初始化的数组。所以客户修改了 ld 链接脚本文件,添加两 个 SECTIONS 分别定位在 0x24000000 和 0x30000000 位置,同时在代码中使用__attribute__关键字指定数组在对应的 SECTIONS 中。4 E" A! T7 @, u# P: d4 V& ]7 \ 依照客户的问题描述,我们首先修改链接脚本,添加两个 SECTIONS 分别为ram_at_0x24000000 和 ram_at_0x30000000,参考如下。 , C" m2 K# G) X8 M Z/ t( _" F, R
8 A& b$ T- U- U3 ~ 同时在源代码中添加两个数组,分别定位在添加的 SECTIONS 中,参考如下。
编译修改之后的工程,是可以正常运行的,但是我们发现当把 ELF 目标文件转为 BIN 文件之后,产生的 BIN 文件非常的大。这就导致如果使用 BIN 文件进行下载的话,是无法下载成功的,因为 BIN 文件的大小以及超出了 Flash 的存储空间。由下图 BIN 文件属性我们可以看到 BIN文件的大小为 650M。 7 \0 ^ @2 u1 f2 T/ Z# y D# T$ n" m, e* O8 u8 X 图4. BIN 文件大小 5 U3 _0 `- B8 P4 s! }
那么是什么原因导致产生的 BIN 文件这么大呢?文件就出在 ld 链接脚本文件这里。 T: t. B2 K( ^4 \ 2 ^& X- ]3 L$ D& V( h! e 完整版请查看:附件% s) n" h' p8 S/ z 9 X4 b( T9 x* x& ` |
LAT1037_关于STM32CubeIDE链接脚本的小问题.pdf
下载666.88 KB, 下载次数: 4
【NUCLEO-C562RE】OLED 显示
保姆级教程:CMake 工程导入 STM32CubeIDE 步骤
STM32CubeCLT 1.22.0新版本发布
【下载问题解决】关于ST官网下载软件问题解决
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
《MCUBoot课程》学习笔记+从信任链原理到量产实践
STM32CubeIDE 2.2.0新版本发布
CubeMX生成CubeIDE工程代码乱码
STM32CubeIDE实时时钟(RTC)经验分享
微信公众号
手机版