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

bal*_*rjd 8 c embedded binary-data microchip

我想知道是否有办法通过include或头文件或类似的东西将外部二进制文件作为C中的变量加载.

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

现在我提到它是一个嵌入式系统的原因是没有文件系统来加载数据,只有RAM和程序存储器,所以我希望使用的任何"预制"数据或表必须在编译时加载通过源文件或使用链接器的目标文件.遗憾的是,IDE没有提供任何手段将任何形式的二进制文件加载到程序存储器中,以任何易于识别的方式以这种方式用作数据高速缓存.

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

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

Jab*_*cky 5

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

例如:

Binaray1.c(自动生成)

unsigned char binaray_file1[] =
{
  1,2,3,10,20,
  ....
} ;
Run Code Online (Sandbox Code Playgroud)

Binaray2.c(自动生成)

unsigned char binaray_file2[] =
{
  0,0,10,20,45,32,212,
  ....
} ;
Run Code Online (Sandbox Code Playgroud)

SomeSourceFile.c

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

// use binary_file1 and binary_file2 here.
Run Code Online (Sandbox Code Playgroud)