【发布时间】:2014-03-17 13:14:36
【问题描述】:
我想知道是否有一种方法可以通过包含或头文件或类似的东西将外部二进制文件作为 C 中的变量加载。
例如,在我目前正在进行的一个项目中,我正在使用一个嵌入式系统,该系统具有一个图形显示器,可以使用 ASCII 数据和命令来显示文本和次要图形(框、线等)。但是,它也会显示单色位图。所以我有一系列用于用户界面的静态显示,以及一些用于启动画面的位图。
现在我提到它是嵌入式系统的原因是没有文件系统可以从中加载数据,只有 RAM 和程序内存,所以我希望使用的任何“预制”数据或表都必须加载通过源文件或使用链接器的目标文件编译时间。不幸的是,IDE 没有提供任何方法将二进制文件以任何形式加载到程序内存中,以便以任何易于识别的方式以这种方式用作数据缓存。
没有做我已经必须解决的问题,(使用十六进制编辑器将二进制文件读取为 ASCII 编码的十六进制并将原始数据作为变量复制并粘贴到头文件中),有没有办法“链接”到文件或“包含”可以在编译时作为 const 变量加载的文件?
我使用的系统是用于 Microchip 系列处理器的 MPLAB X,编译器是 GNC。我主要想知道是否有办法通过一些 C 命令或函数来做到这一点,然后再尝试通过他们的特定编译器/链接器软件寻找一种方法。
【问题讨论】:
-
试试
xxd -i -
GCC 不提供此功能,但包括 GAS 在内的大多数汇编程序确实为此目的提供了“.incbin”指令。与转换为 C 数据或目标文件的单独转换器相比,这通常更方便集成到您的典型 IDE 构建系统中
-
我使用的方法在编译后启用屏幕/徽标/数据更改(在程序员处)并将其存储在程序空间中。我将它用于从统一到计算的校准系数,并且是可靠的。如果您有兴趣,我会回答,但改天。
标签: c embedded binary-data microchip