资源简介
单片机开发过程中,需要将不同的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\li
文件 3250 2018-04-22 12:18 bin2hex\ConsoleApplication1\Debug\ConsoleA.31457AA2.tlog\li
文件 702 2018-04-22 12:18 bin2hex\ConsoleApplication1\Debug\ConsoleA.31457AA2.tlog\li
文件 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个文件信息
- 上一篇:aes verilog源码
- 下一篇:研发中心数据安全解决方案-德讯
评论
共有 条评论