C语言操作二进制文件_c代码执行另外一个bin

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

	return 0;
}
if(fseek(fp_bin,0,SEEK\_END) != 0)
{
	printf("fseek file err\n");
	goto exit;
}
ota_header.bin_len = ftell(fp_bin);
printf("bin size :%d-hex(%x)\n",ota_header.bin_len,ota_header.bin_len);
int retry;

retry =0 ;

lp_retry:
fseek(fp_bin,0,SEEK_SET);
unsigned char dat;
int i=0;ota_header.head_sum=0; int ret=0;
while( (ret = fread(&dat,1,1,fp_bin)) !=0)
{
if(ret == 1)
{
i++;
ota_header.bin_sum += dat;
retry = 0;
}
else
{
printf(“fread err retry %d\n”,retry);
retry++;
if(retry <10)
goto lp_retry;
else
goto exit;
}
}
if(i!=ota_header.bin_len)
{
printf(“read err\n”);
goto exit;
}
printf(“read done\n”);
ota_header.head_sum = ota_header.header_flag + ota_header.sw_version + ota_header.bin_len + ota_header.bin_sum;
/*
printf(“#########bin header info#######\n”);
printf(“header_flag : %X\n”,ota_header.header_flag);
printf(“sw_version : %X\n”,ota_header.sw_version);
printf(“bin_len : %X\n”,ota_header.bin_len);
printf(“bin_sum : %X\n”,ota_header.bin_sum);
printf(“head_sum : %X\n”,ota_header.head_sum);
printf(“tail_flag : %X\n”,ota_header.tail_flag);
printf(“##############################\n”);
printf(“%d\n”,sizeof(BOOTLOADER_UPDATE_FILE_HDR_S));
*/
char *ota_file_name=NULL;
if(argc == 3)
ota_file_name = calloc(strlen(“ota_”)+strlen(file_name)+1,sizeof(char));
else if(argc == 4 && create_file_name!= NULL)
ota_file_name = calloc(strlen(create_file_name)+1,sizeof(char));

if(ota_file_name == NULL)
{
	printf("ota\_file\_name zalloc fail\r\n");
	goto exit;
}
if(argc == 3)
{
	sprintf(ota_file_name,"ota\_%s",file_name);
}
else if(argc ==4)
{
	memcpy(ota_file_name,create_file_name,strlen(create_file_name));
}
printf("create ota name: %s\n",ota_file_name);

fp_out = fopen(ota_file_name,"wb+");
if(fp_out == NULL)
{
	printf("无法打开 %s\n",ota_file_name);
	goto exit;
}

retry = 0;ret = 0;

lp1_retry:
fseek(fp_out,0,SEEK_SET);
if( (ret = fwrite(&ota_header,sizeof(BOOTLOADER_UPDATE_FILE_HDR_S),1,fp_out)) != 1 )
{
printf(“fwrite ota header retry %d\n”,retry);
retry++;
if(retry<10)
goto lp1_retry;
else
goto exit;
}
int retry_ota=0;
lp2_retry:
i=0;dat=0;retry =0;ret =0;retry_ota = 0;
fseek(fp_out,sizeof(BOOTLOADER_UPDATE_FILE_HDR_S),SEEK_SET);
fseek(fp_bin,0,SEEK_SET);
while( i < ota_header.bin_len)
{
if( (ret = fread(&dat,1,1,fp_bin)) == 1)
{
retry = 0;
if( (ret = fwrite(&dat,1,1,fp_out)) ==1 )
{
retry_ota = 0;
i++;
}
else
{
printf(“fwrite %s err %d\n”,ota_file_name,retry_ota);
retry_ota++;
if(retry_ota<10)
goto lp2_retry;
else
goto exit;
}
}
else
{
printf(“fread %s err %d\n”,file_name,retry);
retry++;
if(retry<10)
goto lp2_retry;
else
goto exit;
}
}

if(fseek(fp_out,0,SEEK\_END) != 0)
{
	printf("fseek file err\n");
	goto exit;
}
unsigned int out_bin_num = ftell(fp_out);

if( out_bin_num != (ota_header.bin_len) + sizeof(BOOTLOADER_UPDATE_FILE_HDR_S))
{
	printf("create ota file fail !!!\n");
	goto exit;
}
retry=0;BOOTLOADER_UPDATE_FILE_HDR_S ota_header_bak;

lp3_retry:
fseek(fp_out,0,SEEK_SET);
memset(&ota_header_bak,0,sizeof(BOOTLOADER_UPDATE_FILE_HDR_S));
fread(&ota_header_bak,sizeof(BOOTLOADER_UPDATE_FILE_HDR_S),1,fp_out);
if(memcmp(&ota_header_bak,&ota_header,sizeof(BOOTLOADER_UPDATE_FILE_HDR_S)) != 0)
{
printf(“create ota file haeder err !!!\n”);
goto exit;
}
printf(“######### %s info ############\n”,ota_file_name);
printf(“header_flag: %X\n”,ota_header.header_flag);
printf(“sw_version : %X\n”,ota_header.sw_version);
printf(“bin_len : %X\n”,ota_header.bin_len);
printf(“bin_sum : %X\n”,ota_header.bin_sum);
printf(“head_sum : %X\n”,ota_header.head_sum);
printf(“tail_flag : %X\n”,ota_header.tail_flag);
printf(“###############################\n”);
printf(“create ota file success !!!\n”);

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

sdn.net/topics/618679757)**

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 18
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值