c - 有没有办法在编译时将二进制文件作为常量变量加载到 C 中

标签 c embedded binary-data microchip

我想知道是否有一种方法可以通过包含或头文件或类似的东西将外部二进制文件作为变量加载到 C 中。

例如,在我目前正在进行的一个项目中,我正在使用一个嵌入式系统,该系统具有图形显示,可以使用 ASCII 数据和命令显示文本和次要图形(方框、线条等)。但是,它也会显示单色位图。所以我有一系列用于用户界面的静态显示,以及一些用于初始屏幕的位图。

现在我提到它是一个嵌入式系统的原因是没有文件系统可以从中加载数据,只有 RAM 和程序内存,所以我想使用的任何“预制”数据或表必须加载在通过源文件或使用链接器通过目标文件编译时间。不幸的是,IDE 不提供任何方法来以任何易于识别的方式将二进制文件(实际上以任何形式)加载到程序内存中以用作这种方式的数据缓存。

没有做我已经必须做的事情来解决这个问题,(使用十六进制编辑器将二进制文件读取为 ASCII 编码的十六进制并将原始数据作为变量复制并粘贴到头文件中),有没有办法“链接”到一个文件或“包含”一个可以在编译时作为 const 变量加载的文件?

我正在使用的系统是用于 Microchip 系列处理器的 MPLAB X,编译器是 GNC。在我尝试通过他们的特定编译器/链接器软件专门寻找方法之前,我主要想知道是否有办法通过某些 C 命令或函数来执行此操作。

最佳答案

不,你不能直接这样做。一种方法是将您的二进制文件转换为 C 源代码并将这些部分包含到您的项目中。可以通过编写的简单程序或某些第三方程序来完成转换。

例如:

Binaray1.c(自动生成)

unsigned char binaray_file1[] =
{
  1,2,3,10,20,
  ....
} ;

Binaray2.c(自动生成)

unsigned char binaray_file2[] =
{
  0,0,10,20,45,32,212,
  ....
} ;

SomeSourceFile.c

extern unsigned char binary_file1[] ;
extern unsigned char binary_file2[] ;

// use binary_file1 and binary_file2 here.

关于c - 有没有办法在编译时将二进制文件作为常量变量加载到 C 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22455274/

相关文章:

c - 递归段错误和 StackGuard

arm - 如何制作裸机ARM程序并在QEMU上运行?

python - 如何将文件中的二进制数据解包/转换为可读值?

c - 将字符串作为二进制数据写入文件 - C

基于 Linux 内核头文件中功能的条件编译

c# - 如何在 C# Unity 中使用带有二维数组的 C 结构

c++ - 为什么我在 C 库中看到 THROW?

linux-kernel - 如何从 ARM v7 上的 Linux 内核空间刷新 L1 和 L2 缓存中的地址范围?

unit-testing - 使用ESP-IDF进行单元测试

c - 如何转换UTF-8字符串?