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

2023-11-22

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

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

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

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

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


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

例如:

二进制文件1.c(自动生成)

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

二进制文件2.c(自动生成)

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

一些源文件.c

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

// use binary_file1 and binary_file2 here.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 具有 MVVM 模式的数字文本框

    我见过数字的实现TextBox后面的代码WPF 我们如何做到这一点MVVM图案 在 WPF 中 如果将 TextBox 绑定到 Decimal 或 Int 属性 它将仅接受该 int 或decimal 否则它将显示红色边框 表明它在绑定中没
  • 什么是真与假?它与 True 和 False 有何不同?

    我刚刚了解到有truthy and falsypython 中的值与正常值不同True and False 有人可以深入解释一下什么吗truthy and falsy价值观是 我应该在哪里使用它们 有什么区别truthy and True价
  • 为什么 ${basedir} NLog 配置不起作用?

    为什么我无法在生产服务器中使用 basedir nlog config 如果我使用fileName basedir logs shortdate log nlog 不记录消息信息 但是如果我更改为类似的内容fileName C logs s
  • dockerfile中的EXPOSE和服务YAML中的TARGETPORT与Pod中实际运行的端口有什么关系?

    dockerfile中的EXPOSE和服务YAML中的TARGETPORT与Pod中实际运行的端口有什么关系 在我的 dockerfile 中 expose 8080 在我的部署中 ports containerPort 8080 在我的服
  • fork() 后 libCurl SSL 错误

    我正在开发一个 FUSE 驱动程序 当我将其作为守护进程运行时 没有 f 或 d 标志 通过 libcurl 发出的所有 https 请求都会失败 我能够通过发出 https 请求 分叉并返回父进程 然后从新进程发出第二个请求来重现该错误
  • 查找关联记录存在的位置

    如何仅选择那些具有关联标签记录的员工 换句话说 仅选择具有一个或多个与其关联的标签记录的员工记录 class Employee lt ActiveRecord Base has and belongs to many tags end cl
  • 在 ASP.NET 中正确执行锁定

    我有一个 ASP NET 站点 其搜索功能相当慢 我想通过使用查询作为缓存键将结果添加到缓存一小时来提高性能 using System using System Web using System Web Caching public cla
  • Spring Boot应用程序立即退出

    当我运行我的spring bootapplication 它立即退出 与exit code 0 有了这个 Spring Boot v2 1 0 RELEASE 2018 11 27 14 08 31 219 INFO 94920 resta
  • iOS 检测蓝牙连接/断开

    即使我的应用程序处于后台 当蓝牙设备与 iOS 连接或断开连接时 是否可以收到通知 在 Android 上 我使用ACTION ACL CONNECTED and ACTION ACL DISCONNECTED事件 但我找不到 iOS 的等
  • Chrome 特定的 CSS 问题将表格单元格设置为显示:块

    I found 这个问题那似乎有我想要的 我正在使用 chrome 32 0 1700 102 甚至fiddle第一个答案对我来说效果很好 但是 当我将以下 html 放入新文件并在 chrome 中打开它时 tds 的 计算样式 选项卡仍
  • Flutter 中是否有任何回调告诉我“构建”功能何时完成?

    我的屏幕上有一个 listView 我已经给它附加了一个控制器 我能够调用我的端点 接收响应 解析它并插入行中 ListView 应该自动滚动 确实如此 但不是以完美的方式 我总是落后一个项目 这是我的代码 override Widget
  • Serilog :选择在运行时记录哪个接收器

    我将在 net 标准 2 0 库中实现 Serilog 我正在寻找一种方法来选择每个日志行应使用哪个接收器 假设我们在配置中定义了 2 个接收器 控制台和文件 Log Logger new LoggerConfiguration Minim
  • 为什么用c源代码调试时GDB会“跳回来”

    我正在调试 goldfish android 内核 版本 3 4 带有内核源代码 现在我发现 gdb 有时会在行之间来回跳转 例如考虑如下 c 源代码 char XXX int a if 当我到达if子句 我输入n它会跳回到int a部分
  • Ruby on Rails / PostgreSQL - 启动服务器时出现库未加载错误

    嘿哟 如果这个问题已在另一个线程中得到回答 我提前表示歉意 我搜索过该网站 但没有找到答案 然而 最接近的相关问题是Ruby on Rails PostgreSQL 启动服务器时出现库未加载错误 libq 5 dylib 但它从未解决 答案
  • 如何获得带有空格和大小写混合的随机字符串?

    我需要生成一个带有空格和混合大小写的随机字符串 This到目前为止我所得到的就是
  • 删除 groupby 中不包含元素的组 (Python Pandas)

    让数据框如下所示 import pandas as pd df pd DataFrame name A A B B C C nickname X Y X Z Y Y 如何对 df 进行分组并删除那些不至少包含一个 X 的组 C 谢谢 您可以
  • 通过文件共享、用户身份验证通过网络复制文件

    我正在构建一个 net C 控制台程序来将文件部署到 Windows 文件共享服务器 正在共享的文件夹 路径是 192 168 0 76 htdocs public 运行时我收到错误 09 35 29 Step 1 3 Unhandled
  • 如何对算法进行逆向工程?

    我想知道如何反转一种算法 例如用于存储登录名或个人识别码的算法 假设我有大量数据 其中 7262627 gt gt 8172 5353773 gt gt 1132 等等 这只是一个例子 或者说将一个十六进制字符串转换为另一个字符串 h871
  • JavaScript 中如何检查字符串中是否包含数字?

    我不明白在 JavaScript 中区分包含数字的字符串和其他字符串有多难 Number 评估为0 while 对于人类来说绝对不是一个数字 parseFloat强制使用数字 但允许它们被任意文本所限制 isNaN对于空白字符串 计算结果为
  • 有没有办法在编译时将二进制文件作为 C 中的 const 变量加载

    我想知道是否有一种方法可以通过包含文件或头文件或类似文件来加载外部二进制文件作为 C 中的变量 例如 在我目前正在进行的一个项目中 我正在使用一个具有图形显示器的嵌入式系统 该系统将使用 ASCII 数据和命令来显示文本和次要图形 框 线等