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

[复制链接]
1433|5
 楼主| xiaofei558008 发表于 2020-2-25 16:25 | 显示全部楼层 |阅读模式
各位大佬,
希望能在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."
20200227124908.jpg

20200227124924.jpg

20200227125021.jpg

20200227125050.jpg

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. int main()
  5. {
  6.     char name[256];
  7.     char *p="this is the end of bin.";
  8.     char *pstr;
  9.     int nReturn,StrCount=0;
  10.     int NameSize=0;
  11.     FILE *fp_src,*fp_dst;

  12.     printf("Hello world!\n");

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

  16.     fp_src = fopen(name,"rb");
  17.     if (fp_src == NULL)
  18.     {
  19.         printf(""%s" file is not exist !\n\r",name);
  20.         return 1;
  21.     }
  22.     fclose(fp_src);

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

  29.     fseek(fp_src,0,SEEK_END);

  30.     fputs(p, fp_src);

  31.     fclose(fp_src);

  32.     return 0;
  33. }


file_BinAddStr.rar (2.42 KB, 下载次数: 13)


评论

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


您需要登录后才可以回帖 登录 | 注册

本版积分规则

142

主题

997

帖子

13

粉丝
快速回复 在线客服 返回列表 返回顶部