实战经验 | 如何使用STM32CubeIDE链接一个文件到工程中
本帖最后由 STM新闻官 于 2025-7-24 15:45 编辑前言在一些情况下,需要将一些数据文件直接加载到项目工程中去使用,比如一些参数配置文件,秘钥文件等。如果我们直接把文件的二进制内容复制到工程中作一个const常量去操作,那每次这个文件修改时,都需要重新编写一次代码。
如果编译器在编译的时候可以直接将这个二进制文件块链接到工程中,就省去了每次修改代码的过程,直接替换文件并重新编译就能更简单的实现这个功能了。基于此,我们介绍下如何使用STM32CubeIDE链接二进制文件块。
实现方法比如我们要一个readme.txt到工程中,首先创建一个文件,并增加文件内容,如下图。
首先在分散加载文件XXX_FLASH.ld中添加binary_data段,并使用KEEP()来修饰,来保证即使这段即使不被调用,也不会连接器的垃圾回收机制删除。
.binary_data : {_binary_data_start = .;KEEP(*(.binary_data));_binary_data_end = .; } > FLASH
然后在C文件中使用incbin指令把readme.txt文件包含到C中,incbin是汇编语言中的一个伪指令,用于将二进制文件的内容直接包含到生成的目标文件中。类似于C语言的#include。"a":表示该段是一个可分配的段(allocatable)。这意味着在链接时,该段会被分配内存地址,并且会出现在最终的可执行文件中。
asm(".section .binary_data,\"a\";"".incbin \"../readme.txt\";");
完成上述包含之后就可以在C代码中调用了。
extern int _binary_data_start;int main(void){int *bin_area = &_binary_data_start;
03测试验证根据bin_area的地址,通过Debug查看其内存,可以看到ASCII码和readme.txt文件中的内容相同。
或使用STM32CubeProgrammer读取其地址内容。
04总结本文介绍如何使用STM32CubeIDE将一个文件链接到工程中方法,在实际应用中有许多常见的场景及用途,如嵌入图像、音频、字体、数据库等文件到工程中,固件更新,嵌入秘钥或证书等场景。
点击按钮下载《如何使用STM32CubeIDE链接一个文件到工程中》原文档。
点击下载
相关阅读
▷实战经验 | STM32N6平台如何使用MCO2输出Clock▷实战经验 | STM32C0 HAL库的SPI驱动导致的Hardfault问题分析▷实战经验 | STM32N6平台STM32CubeIDE下printfIO重定向到SWV-ITM▷实战经验 | STM32 AFCI方案TensorBoard的使用介绍
查看详情
阅读原文
页:
[1]