【官方原创】LAT1724 STM32CubeIDE for VSCode 修改链接文件中的起始地址无效?

1.前言

近期在使用STM32CubeIDE for VSCode调试STM32的Boot-App时,发现一个问题:虽然修改了链接文件中的Flash的起始地址,但是elf中的地址一直未改变。


2.问题分析

通过STM32CubeMX2生成的CMake工程中,code区的起始地址是通过链接文件中的memory来定义的,如需调整,修改下图中的地址即可:

图1. 链接文件中的内存分配定义

我将ROM的起始地址由0x08000000修改为0x08001000后,在点击"build"按钮编译,得到如下的编译结果:

图2. 修改链接文件后的编译结果

仔细查看编译的输出信息,会发现编译器在这里什么也没干,这是为啥呢?我明明修改了ld文件中的flash地址了呀!

事实上,这是因为在默认生成的CMakelist文件中,并没有把ld文件当成链接依赖,自然不会每次编译都去重新加载链接文件。


3.解决方法

知道了原因,那么要想让CMake工程每次执行"build"时,都去加载ld链接文件的话,可以清除当前的编译结果,或者手动添加依赖命令,我们一起来看看具体的实现吧。

3.1方法一

简单的做法就是每次执行"build"之前,手动清理工程的编译结果,然后再次编译即可,这个方法不需要任何额外的命令,缺点就是每次都要手动清除,这对工程师明显不是友好的方法。

图3. 方法一 手动清除和编译

3.2方法二

我们可以把链接文件标记为链接阶段的依赖(在CMake工程的根目录下的CMakelist文件中添加),这样就可以每次执行"build"时,自动加载ld文件,任何ld文件的改变都能自动感知了。

上述依赖就是指定路径,并自动搜索可用的链接文件。添加后的结果如下图所示:

图4. 方法二 自动链接脚本编译


4.小结

链接文件改动是否能导致重新编译取决于依赖关系。现在AI工具非常丰富,我们可以让AI工具对这里的依赖给出详细的解答,这样就能做到对添加的内容知根知底。

点击下载《LAT1724 STM32CubeIDE for VSCode 修改链接文件中的起始地址无效?》原文档。


重要通知 - 请仔细阅读

意法半导体公司及其子公司 ("ST")保留随时对 ST 产品和 / 或本文档进行变更的权利,恕不另行通知。买方在订货之前应获取关于 ST 产 品的最新信息。 ST 产品的销售依照订单确认时的相关 ST销售条款。 买方自行负责对 ST 产品的选择和使用, ST 概不承担与应用协助或买方产品设计相关的任何责任。 ST 不对任何知识产权进行任何明示或默示的授权或许可。 转售的 ST 产品如有不同于此处提供的信息的规定,将导致 ST 针对该产品授予的任何保证失效。 ST 和 ST 徽标是 ST 的商标。若需 ST 商标的更多信息,请参考 www.st.com/trademarks。所有其他产品或服务名称均为其 各自所有者的财产。 本文档是ST中国本地团队的技术性文章,旨在交流与分享,并期望借此给予客户产品应用上足够的帮助或提醒。若文中内容存有局限或与ST 官网资料不一致,请以实际应用验证结果和ST官网最新发布的内容为准。您拥有完全自主权是否采纳本文档(包括代码,电路图等)信息, 我们也不承担因使用或采纳本文档内容而导致的任何风险。 本文档中的信息取代本文档所有早期版本中提供的信息。 © 2020 STMicroelectronics - 保留所有权利

相关推荐
BSD_HY2 小时前
嵌入式薄膜开关中断去抖:中断优先级分层实战策略
单片机·嵌入式硬件·薄膜开关·源头工厂·薄膜按键
Zw-awa13 小时前
八路循迹模块的 DO:先让小车沿着线跑起来
stm32
黑妹天下第一乖14 小时前
第09讲 · 多媒体与音频 SDK:硬件编解码与端侧语音
人工智能·嵌入式硬件·深度学习·机器人·音视频·iot
comyccccc14 小时前
LM2596电源PCB布局布线全解析学习笔记
单片机·嵌入式硬件
恒锐丰科技林技术员16 小时前
EG2122 半桥栅极驱动芯片原理与工程应用解析
经验分享·嵌入式硬件·硬件工程
qq_4017004116 小时前
FreeRTOS 堆内存管理源码剖析:释放一块内存,空闲块数量反而变少了?
单片机·freertos
新晨单片机设计17 小时前
S017C-基于STM32汽车防酒驾系统(心率、血氧、短信)【Proteus仿真+Keil程序+原理图】
stm32·单片机·proteus·防酒驾报警系统
蓝天居士18 小时前
PY32F系列MCU在OTA时App区概率性跑不起来的根因分析(3)
mcu·嵌入式
fly_sunnn18 小时前
STM32-GPIO输出以及按键控制LED&光敏传感器控制蜂鸣器
stm32·单片机·嵌入式硬件