打印
[STM32F4]

如何在bin文件最后增加一串特殊的字符串

[复制链接]
1017|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
各位大佬,
希望能在bin文件最后增加一串字符串作为文件的结束;不知道如何设置,是编译的时候,自动在bin文件最后加入这一串字符串;

使用特权

评论回复
沙发
toofree| | 2020-2-25 17:47 | 只看该作者
本帖最后由 toofree 于 2020-2-25 17:53 编辑

添加字符串,还是建议用生成的HEX文件添加吧。HEX添加后, 再生成BIN文件。
直接用BIN添加也可以,有些不确定因素得知道。你的BIN文件是如何生成的,未使用的空间填充内容了吗?
如果填充了FF或00,那得从BIN文件末尾往回找真正的内容末尾,但是内容末尾的一个FF或00有可能是有效代码,或者不只一个。

使用特权

评论回复
板凳
xiaofei558008|  楼主 | 2020-2-25 19:03 | 只看该作者
toofree 发表于 2020-2-25 17:47
添加字符串,还是建议用生成的HEX文件添加吧。HEX添加后, 再生成BIN文件。
直接用BIN添加也可以,有些不确 ...

我大概的想法是,bin文件最后增加一个字符串,用来说明到了文件末尾,比如增加"this is the end of bin."用来识别文件的结尾;

使用特权

评论回复
地板
toofree| | 2020-2-27 12:38 | 只看该作者
本帖最后由 toofree 于 2020-2-27 12:53 编辑
xiaofei558008 发表于 2020-2-25 19:03
我大概的想法是,bin文件最后增加一个字符串,用来说明到了文件末尾,比如增加"this is the end of bin." ...

编译时设置不了,在链接完成后才能知道程序总共使用了哪些空间,占用空间有可能是不连续的。
但是生成HEX或BIN后,程序空间分配就固定下来了。
如果是用BIN的文件尾的确是程序占用空间的尾部的话,可以写个C代码,编辑BIN文件,在文件尾追加写入你要添加的"this is the end of bin."








#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char name[256];
    char *p="this is the end of bin.";
    char *pstr;
    int nReturn,StrCount=0;
    int NameSize=0;
    FILE *fp_src,*fp_dst;

    printf("Hello world!\n");

    printf("请输入要操作的文件名:\n");
    NameSize = scanf("%[^\n]",name);
    printf("\n%s\n",name);

    fp_src = fopen(name,"rb");
    if (fp_src == NULL)
    {
        printf("\"%s\" file is not exist !\n\r",name);
        return 1;
    }
    fclose(fp_src);

    fp_src = fopen(name,"ab+");
    if (fp_src == NULL)
    {
        printf("\"a.bin\" file is not exist !\n\r");
        return 1;
    }

    fseek(fp_src,0,SEEK_END);

    fputs(p, fp_src);

    fclose(fp_src);

    return 0;
}


file_BinAddStr.rar (2.42 KB)


使用特权

评论回复
评论
xiaofei558008 2020-2-27 13:43 回复TA
谢谢大侠! 我弄了个笨办法 在 icf 文件里面申请了一个靠近flash尾巴的地址; 将 char end_of_file[] @ ".end_of_file" = "this is end of file"; 放在最后面; 坏处是非常慢,写的时候不管3、7、 21将整个bin全写了一次flash. 还是你这个工具厉害~ 
5
xiaofei558008|  楼主 | 2020-2-27 13:43 | 只看该作者
谢谢大侠!
我弄了个笨办法
在 icf 文件里面申请了一个靠近flash尾巴的地址;

char end_of_file[] @ ".end_of_file" = "this is end of file";
放在最后面;

坏处是非常慢,写的时候不管3、7、 21将整个bin全写了一次flash. 还是你这个工具厉害~


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

137

主题

971

帖子

13

粉丝