首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将原始C数组数据重定向到嵌入式系统工业中的数据文件

将原始C数组数据重定向到嵌入式系统工业中的数据文件
EN

Stack Overflow用户
提问于 2022-05-19 00:43:00
回答 1查看 82关注 0票数 0

我见过一些没有功能的代码。它们只有数据,文件应该转换为数据文件,而不是可执行文件。

例如,它类似于

config.c

代码语言:javascript
复制
const unsigned char configData[] = \
"Cnf"
"\0x01\0x01\0x00\0x00\0x00\0x00\0x00\0x00"
"LOCAL/ITEM.MSG\0x00"
"\x7E\xD1\xF5\x3A\0x00\0x00\0x00";

该文件应该以二进制形式转换为config.dat,从Cnf\0x01\0x01...开始,以没有页眉或页脚的\xF5\x3A\0x00\0x00\0x00结尾。

这种行动的名称是什么?我有谷歌关键词的问题。

而且,如何使用gcc编译器完成这样的操作?

更新:我不是在使用fwrite或库。我不想在上面的代码中添加任何内容,也不想从代码中删除任何行。让我们保持这个文件原封不动。我的问题不是创建二进制文件。我的问题主要是理解编译器是如何处理这些特定文件的。我在嵌入式系统行业中见过这样的文件。但还没有发现它们是如何工作的。

EN

回答 1

Stack Overflow用户

发布于 2022-05-19 01:26:03

解释为:“如何在构建时将二进制文件嵌入到我的C程序中?”

我就是这样做的。我使用自定义构建步骤将二进制文件转换为.c文件。

在Makefile:

代码语言:javascript
复制
program: main.c configData.c resource.h # and more
    $(CC) -o program main.c configData.c # and more

configData.c: configData.dat bin2c
    ./bin2c configData.dat configData.c

bin2c: bin2c.c
    $(HOSTCC) -o bin2c bin2c.c 

在资源方面:

代码语言:javascript
复制
extern char configData[];
extern size_t configDataLen;

在bin2c.c中:

代码语言:javascript
复制
#include <stdio.h>
int main(int argc, char **argv)
{
    if (argc < 3) {
        fprintf(stderr, "Usage: bin2c binary.dat binary.c symbol\n");
        return 1;
    }
    FILE *in = fopen(argv[1], "rb");
    if (!in) { perror(argv[1]); return 1; }
    FILE *out = fopen(argv[2], "w");
    if (!out) { perror(argv[2]); return 1; }
    int c;
    long len = 0;
    fprintf(out, "#include <stddef.h>\n");
    fprintf(out, "char %s[] = {"
    while ((c = getc(in)) > EOF) {
        if (len > 0) puts(',', out);
        fprintf("%d", c);
        ++len;
        if (ferror(out)) { perror(argv[2]); return 1; }
    }
    fprintf(out, "};\n");
    fprintf(out, "size_t %sLen = %ld;", len);
    if (ferror(out)) { perror(argv[2]); return 1; }
    if (fclose(out)) { perror(argv[2]); return 1; } /* Yup check fclose for errors */
    if (ferror(in)) { perror(argv[1]); return 1; }
    return 0;
}

在.gitignore中:

代码语言:javascript
复制
bin2c
configData.c

人们做得比这更好。我见过一些花哨的链接器脚本,这些脚本使链接器能够获取dat文件。我的方法具有易于理解和便携的优点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72297444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档