• 大小: 973KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-12
  • 语言: 其他
  • 标签: bin,hex  

资源简介

单片机开发过程中,需要将不同的bin文件(boot、app,data)合并,合并之后的文件需要转成16进制文件时使用此工具。 可以直接使用,也可以对源文件编辑,编译,按照自定义的要求实现特定的功能。

资源截图

代码片段和文件信息


#include 
#include 
#include 


#ifndef BIN2HEX_H
#define BIN2HEX_H
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned long uint32_t;
/***********************************
*********************************************
就是每次读写bin文件N个字节,然后再转化为hex格式流,hex格式流长度计算方式
: + 长度 + 地址 + 类型 + N个数据(N >= 0) + 校验
1 + 2    + 4    + 2    + N * 2           + 2
********************************************************************************/
#define NUMBER_OF_ONE_LINE     0x10//0x20
#define MAX_BUFFER_OF_ONE_LINE  (NUMBER_OF_ONE_LINE *2 + 11)
typedef struct {
uint8_t len;
uint8_t addr[2];
uint8_t type;
uint8_t *data;
} HexFormat;

typedef enum {
RES_OK = 0                    //操作完成
RES_BIN_FILE_NOT_EXIST        //相当于bin文件不存在,包括输入的路径可能存在不正确
RES_HEX_FILE_PATH_ERROR        //目标文件路径可能输入有误         
RES_HEX_ADDRRESS_ERROR         //目标文件地址可能输入有误         
} RESULT_STATUS;

RESULT_STATUS BinFile2HexFile(char*src char *dest);
#endif
/********************************************************************************
input:
dest: 为转换后的结果
p->addr[0]: 高地址
p->addr[1]: 低地址
p->type: 记录类型
p->data: 为bin格式流有效数据指针
p->len: 为bin格式流有效数据长度
output:
返回有效数据的长度
********************************************************************************/
uint16_t BinFormatEncode(uint8_t *dest HexFormat *p)
{
uint16_t offset = 0;
uint8_t check = 0 num = 0;    //:(1) + 长度(2) + 地址(4) + 类型(2)
sprintf(&dest[offset] “:%02X%02X%02X%02X“ p->len p->addr[0] p->addr[1] p->type);
offset += 9;                   //hex格式流数据指针偏移2
check = p->len + p->addr[0] + p->addr[1] + p->type; //计算校验和
while (num < p->len)          //当数据长度不为0,继续在之前的hex格式流添加数据
{
sprintf(&dest[offset] “%02X“ p->data[num]);
check += p->data[num];      //计算校验和
offset += 2;               //hex格式数据流数据指针偏移2
num++;                     //下一个字符
}
check = ~check + 1;             //反码+1
sprintf(&dest[offset] “%02X“ check);
offset += 2;
return offset;                  //返回hex格式数据流的长度
}


RESULT_STATUS BinFile2HexFile(char*src char *dest char *addr)
{
FILE *src_file *dest_file;
uint16_t tmp;
HexFormat gHexFor;
uint32_t low_addr = 0x8000 hign_addr = 0;
uint8_t buffer_bin[NUMBER_OF_ONE_LINE*10] buffer_hex[MAX_BUFFER_OF_ONE_LINE*10];
uint32_t src_file_length;
uint16_t src_file_quotient cur_file_page = 0;
uint8_t src_file_remainder;

//low_addr = addr[0] - 0x30;
//low_addr *= 256;
//low_addr += (addr[1] - 0x30);
//low_addr *= 256;
////low_addr += (addr[2] - 0x30);
////low_addr *= 256;
////low_addr += (addr[3] - 0x30);
//printf(“%d help\r\n“low_addr);

//if (low_addr > 0x10000)
//{
// return RES_HEX_ADDRRESS_ERROR;
//}

src_file = fopen(src “rb“);        //源文件为bin文件以二进制的形式打开
if (!src_file)                      //这里也是相当于用来检查用户的输入是否准备
{
return RES_BIN_FILE_NOT_EXIST;
}
dest_file = fopen(dest “w“);       //目的文件为hex文件,以文本的形式打开
if (!dest_file)
{

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-04-22 14:11  bin2hex\
     目录           0  2018-04-22 11:53  bin2hex\.vs\
     目录           0  2018-04-22 11:53  bin2hex\.vs\ConsoleApplication1\
     目录           0  2018-04-22 11:53  bin2hex\.vs\ConsoleApplication1\v14\
     文件       43008  2018-04-22 14:11  bin2hex\.vs\ConsoleApplication1\v14\.suo
     目录           0  2018-04-22 11:53  bin2hex\ConsoleApplication1\
     文件        1339  2018-04-20 19:20  bin2hex\ConsoleApplication1.sln
     文件     1847296  2018-04-22 14:11  bin2hex\ConsoleApplication1.VC.db
     文件        7716  2018-04-22 11:56  bin2hex\ConsoleApplication1\ConsoleApplication1.vcxproj
     文件         946  2018-04-22 11:56  bin2hex\ConsoleApplication1\ConsoleApplication1.vcxproj.filters
     文件       59149  2018-04-20 23:26  bin2hex\ConsoleApplication1\DCT100_1.hex
     文件       24576  2018-04-20 22:57  bin2hex\ConsoleApplication1\DCT100_App.bin
     目录           0  2018-04-22 11:56  bin2hex\ConsoleApplication1\Debug\
     文件       25646  2018-04-22 09:44  bin2hex\ConsoleApplication1\Debug\aaaaa.obj
     目录           0  2018-04-22 12:18  bin2hex\ConsoleApplication1\Debug\ConsoleA.31457AA2.tlog\
     文件        2290  2018-04-22 12:18  bin2hex\ConsoleApplication1\Debug\ConsoleA.31457AA2.tlog\CL.command.1.tlog
     文件        7952  2018-04-22 12:18  bin2hex\ConsoleApplication1\Debug\ConsoleA.31457AA2.tlog\CL.read.1.tlog
     文件         994  2018-04-22 12:18  bin2hex\ConsoleApplication1\Debug\ConsoleA.31457AA2.tlog\CL.write.1.tlog
     文件         221  2018-04-22 12:18  bin2hex\ConsoleApplication1\Debug\ConsoleA.31457AA2.tlog\ConsoleApplication1.lastbuildstate
     文件        2886  2018-04-22 12:18  bin2hex\ConsoleApplication1\Debug\ConsoleA.31457AA2.tlog\link.command.1.tlog
     文件        3250  2018-04-22 12:18  bin2hex\ConsoleApplication1\Debug\ConsoleA.31457AA2.tlog\link.read.1.tlog
     文件         702  2018-04-22 12:18  bin2hex\ConsoleApplication1\Debug\ConsoleA.31457AA2.tlog\link.write.1.tlog
     文件        2054  2018-04-20 23:37  bin2hex\ConsoleApplication1\Debug\ConsoleApplication1.Build.CppClean.log
     文件         554  2018-04-22 12:18  bin2hex\ConsoleApplication1\Debug\ConsoleApplication1.log
     文件       18504  2018-04-22 12:18  bin2hex\ConsoleApplication1\Debug\main.obj
     文件       68608  2018-04-22 12:18  bin2hex\ConsoleApplication1\Debug\vc140.idb
     文件       77824  2018-04-22 12:18  bin2hex\ConsoleApplication1\Debug\vc140.pdb
     目录           0  2018-04-22 12:20  bin2hex\Debug\
     目录           0  2018-04-22 12:20  bin2hex\Debug\batfile\
     文件       47156  2018-04-22 12:20  bin2hex\Debug\batfile.zip
     文件       39424  2018-04-22 12:18  bin2hex\Debug\batfile\bin2hex.exe
............此处省略10个文件信息

评论

共有 条评论

相关资源