ST意法半导体
直播中

张伟

8年用户 1728经验值
私信 关注
[问答]

使用STM32CubeMX生成CMake工程中的FLASH.ld被更改怎么解决?

使用STM32CubeMX生成CMake工程之后,对STM32xxxx_FLASH.ld进行了修改。然后再次使用STM32CubeMX对工程进行修改的时候,STM32xxxx_FLASH.ld文件汇总被修改的部分会被恢复原状。请问各位有没有好的办法能够解决这个问题,烦请指教!!!

回帖(2)

李启华

2025-3-10 15:03:30
修改完把这个文件设为只读应该可以。
举报

发财树

2025-3-11 17:25:34

在使用STM32CubeMX生成CMake工程时,STM32xxxx_FLASH.ld文件是自动生成的链接脚本文件。如果你对这个文件进行了手动修改,再次使用STM32CubeMX生成代码时,这些修改会被覆盖,导致你的更改丢失。为了解决这个问题,你可以采取以下几种方法:


1. 使用自定义链接脚本




  • 步骤



    1. 将修改后的STM32xxxx_FLASH.ld文件复制到一个新的目录,并重命名为STM32xxxx_CUSTOM_FLASH.ld(或其他你喜欢的名字)。

    2. 在CMakeLists.txt或Makefile中,修改链接脚本的路径,指向你自定义的链接脚本文件。

    3. 这样,STM32CubeMX生成的默认链接脚本不会影响你的自定义脚本。




  • CMakeLists.txt示例


     set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/path/to/your/STM32xxxx_CUSTOM_FLASH.ld)
    target_link_options(${PROJECT_NAME}.elf PRIVATE -T ${LINKER_SCRIPT})



2. 使用STM32CubeMX的“User Code Sections”功能



  • 步骤

    1. 在STM32CubeMX中,找到“Project Manager”选项卡。

    2. 在“Code Generator”部分,勾选“Generate peripheral initialization as a pair of '.c/.h' files per peripheral”。

    3. 在“Advanced Settings”中,找到“Linker Script”部分,勾选“Generate separate linker script for each project”。

    4. 这样,STM32CubeMX会生成一个单独的链接脚本文件,你可以在这个文件中进行修改,而不会被覆盖。



3. 使用版本控制系统(如Git)



  • 步骤

    1. 使用Git或其他版本控制系统来管理你的工程。

    2. 在每次使用STM32CubeMX生成代码之前,提交当前的工程状态。

    3. 生成代码后,使用git checkout命令恢复你修改过的文件。

    4. 这样,你可以保留你的修改,同时使用STM32CubeMX生成的新代码。



4. 手动合并修改



  • 步骤

    1. 每次使用STM32CubeMX生成代码后,手动将你的修改合并到新生成的STM32xxxx_FLASH.ld文件中。

    2. 这种方法比较繁琐,但可以确保你的修改不会被覆盖。



5. 使用脚本自动化



  • 步骤

    1. 编写一个脚本,在STM32CubeMX生成代码后,自动将你的修改应用到新生成的STM32xxxx_FLASH.ld文件中。

    2. 这种方法需要一定的脚本编写能力,但可以大大减少手动操作的工作量。



总结


最推荐的方法是使用自定义链接脚本STM32CubeMX的“User Code Sections”功能,这样可以避免手动修改被覆盖的问题。如果你熟悉版本控制,也可以使用Git来管理你的修改。选择哪种方法取决于你的具体需求和项目复杂度。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分