将二进制文件包含为常量数组

Mar*_*tin 4 c binary file include

我有一个嵌入式 C 项目,正在使用 eclipse 进行编译。我需要将二进制文件作为常量数组读入应用程序代码。

该二进制文件约为 200kB,需要成为应用程序代码的一部分,以便应用程序代码可以随时读取二进制映像并将其加载到板上需要此初始化映像的另一个设备中。

我通常会将图像加载到板上的非易失性存储器中,然后读取并移动它,但这在这里不可行,它必须是可执行图像的一部分。

我可以在 makefile 中通过将 .bin 文件链接到某个地址来完成此操作,或者在 C 代码中执行此操作,例如

const char binFileImage [] = { file.bin };
Run Code Online (Sandbox Code Playgroud)

这显然行不通,但我还没有想出可行的语法。

仅供参考,file.bin确实是一个二进制文件。

关于如何做到这一点有什么想法吗?

Som*_*ude 5

使用链接器脚本将二进制文件放入特定地址可能是最好也是最简单的解决方案。

其他解决方案包括使用 makefile 调用的某个程序将文件转换为包含有效数组定义的源文件。例如,假设文件以值0x23、0x05和开头,那么0xb3自动0x8f生成的源文件可能类似于

const uint8_t binary_file_data[] = {
    0x23, 0x05, 0xb3, 0x8f, ...
};
Run Code Online (Sandbox Code Playgroud)

  • @user2969503 写你自己的。除此之外,您还可以使用 binutils 中的“objcopy”来执行此操作。 (2认同)
  • 在 Linux 上:“ld -r -b 二进制 -o 二进制.o 二进制.文件”。请参阅http://stackoverflow.com/questions/22455274/is-there-a-way-to-load-a-binary-file-as-a-const-variable-in-c-at-compile-time (2认同)