打印

哪位能提供HEx转bin的工具?

[复制链接]
10185|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xlsbz|  楼主 | 2011-4-21 00:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
bg6nw| | 2011-4-21 03:11 | 只看该作者
hex转bin最简单的办法是用烧写器的软件打开hex文件,然后另存为bin文件。

使用特权

评论回复
板凳
zhaoyu2005| | 2011-4-21 09:16 | 只看该作者
LZ,搞清楚ROM(FLASH)和RAM再来吧。hex和bin没法区分是数据的存储域,都是指定地址的数据,这个地址在哪个域就不知道了,只能看实际的器件了

使用特权

评论回复
地板
原野之狼| | 2011-4-21 09:41 | 只看该作者
使用RAM还是XRAM跟转换没有任何关系 网上工具很多 可以参考2L的意见

使用特权

评论回复
5
yewuyi| | 2011-4-21 09:47 | 只看该作者
都不需要什么软件的,直接把HEX文件导入编程器软件,一般编程器软件都支持导出数据的,导出时选择BIN格式即可

使用特权

评论回复
6
xlsbz|  楼主 | 2011-4-21 21:52 | 只看该作者
都不需要什么软件的,直接把HEX文件导入编程器软件,一般编程器软件都支持导出数据的,导出时选择BIN格式即可
yewuyi 发表于 2011-4-21 09:47


KEIL51 导不出来啊

使用特权

评论回复
7
xlsbz|  楼主 | 2011-4-21 21:55 | 只看该作者
LZ,搞清楚ROM(FLASH)和RAM再来吧。hex和bin没法区分是数据的存储域,都是指定地址的数据,这个地址在哪个域就不知道了,只能看实际的器件了
zhaoyu2005 发表于 2011-4-21 09:16


嗨  对牛谈了....

“因为我的代码用到了外部的ram 也叫Xram

这几个工具好像不支持”


这话说得 似乎没问题,即便有问题。看我用了“好像”这个词了么?

使用特权

评论回复
8
xlsbz|  楼主 | 2011-4-21 21:56 | 只看该作者
使用RAM还是XRAM跟转换没有任何关系 网上工具很多 可以参考2L的意见
原野之狼 发表于 2011-4-21 09:41


我导出来的HEX文件 没用XRAM的话 用网上的工具可以转换成bin 。用了XRAM 就提示错误了

使用特权

评论回复
9
xlsbz|  楼主 | 2011-4-21 22:02 | 只看该作者
hex转bin最简单的办法是用烧写器的软件打开hex文件,然后另存为bin文件。
bg6nw 发表于 2011-4-21 03:11


你这想法我也想到了!

但是我觉得还是精益求精 方便别人为好。

现在有时候更新程序得拆机箱 比较麻烦,所以打算用串口烧录程序。
但是我们用的keil只能转成HEX。

如果再让别人将HEX转成bin,那多麻烦。

所以打算自己编写。

嗨 你这么一说  我感觉还是用烧写器提供的软件还不错。

起码比我自己写的稳定。

找那个hex转bin的代码 真不容易啊  最后锁定用vc++了。但我只会VB。 本来打算等几天学学C++  

你这么一提醒   还是......

恩  

人都是懒惰的。

还是直接将bin导入我自己写的牛X VB软件吧  

稳定稳定。

一定要稳定啊!!

使用特权

评论回复
10
ejack| | 2011-4-22 08:05 | 只看该作者
理论上来说用不用外部RAM不会产生额外的代码块。所以我对你说的“开了外部RAM后不好用”有所怀疑。请LZ把开外部RAM之前和之后的hex文件贴上来,大家分析分析。
另外,hex的格式其实不复杂,可以认为是二进制代码的一种格式化文本表述。
贴个TurboC 2.0下的转换源程序。此程序不太规范、适用范围也很狭窄,不过可以参考一下。
 
/**********************************************************************
文件名:HEX2BIN
功能: 将Intel HEX格式的文件转换为二进制文件
        不计算校验和
***********************************************************************/
#include "stdio.h"
#include "fcntl.h"
#include "io.h"
#define ROWSIZE 80
int SourceP;    /*源文件指针*/
int TargetP;    /*目标文件指针*/
unsigned char source[ROWSIZE];  /*声明数组,用以存放行文本*/
unsigned char target[32];       /*存放目标代码*/
unsigned char ErrFlag = 0;
unsigned char EndFlag = 0;
unsigned char Text2Bin(unsigned char);

void main()
{
char In_FileName[15], Out_FileName[15];
unsigned char i;
long SrcOff = 0;
long TgtOff = 0;
struct
{
     unsigned char ByteNum;
     unsigned char TotalNum;
}Row;

printf("Input HEX filename:\n");
scanf("%s",In_FileName);
strcpy(Out_FileName, In_FileName);
strcat(In_FileName, ".hex");
strcat(Out_FileName, ".bin");
printf("Source HEX file:%s\n",In_FileName);
printf("Target BIN file:%s\n",Out_FileName);

/*以无缓冲方式打开源文件*/
SourceP = open(In_FileName, O_BINARY | O_RDONLY);
if(SourceP==-1)
{
  printf("Source not exist! Enter to return\n");
  getch();
  exit(1);
}

/*以无缓冲方式打开目标文件*/
TargetP = open(Out_FileName, O_BINARY | O_RDWR);
if(TargetP==-1)
{
  TargetP = _creat(Out_FileName, 1);
  if(TargetP==-1)
  {
      close(SourceP);
      printf("Can not open target! Enter to return.\n");
      getch();
      exit(1);
  }
}

/*读入源文件文本,转换为二进制写入目标文件*/
while(EndFlag==0)
{
     lseek(SourceP, SrcOff, SEEK_SET);
     read(SourceP, source, ROWSIZE);
     if(source[0]!=':')
     {
         EndFlag = 1;
         break;
     }
     for(i = 0; i < ROWSIZE; i++)    /*找到下一个有效行*/
     {
         if(source[i]==':')
         {
             if((source[i-2]==0x0D)&&(source[i-1]==0x0A))
             {
                 break;
             }
         }
     }
     if(i==ROWSIZE)  /*找不到,则结束转换过程*/
     {
         EndFlag = 1;
         break;
     }
     SrcOff = SrcOff + i;        /*源文件偏移量指向下一行*/
     Row.ByteNum = Text2Bin(1);  /*代码字节数*/
     if(Row.ByteNum==0)      /*行字节数为0,是标准的结束方式*/
     {
         EndFlag = 1;
         break;
     }
     Row.TotalNum = i;           /*文本行字节数*/
     TgtOff = Text2Bin(3);
     TgtOff = TgtOff * 0x100;
     TgtOff = TgtOff + Text2Bin(5);
     if((TgtOff<0)||(TgtOff>0xFFFF)) /*校验偏移量*/
     {
      close(SourceP);
      close(TargetP);
      printf("Out of range:%d Enter to return.\n",TgtOff);
      getch();
      exit(1);
     }
     for(i = 0; i < Row.ByteNum; i++)    /*将文本转换为二进制存入数组*/
     {
         target[i] = Text2Bin(9 + 2 * i);
     }
     lseek(TargetP, TgtOff, SEEK_SET);
     write(TargetP, target, Row.ByteNum);
    }

close(SourceP);
close(TargetP);
printf("Conversion complete.\n");
}
unsigned char Text2Bin(unsigned char start)
{
    unsigned char m, n;
   
    m = source[start];
    if((m >= '0')&&(m <= '9'))
    {
        m -= '0';
    }
    else if((m >= 'A')&&(m <= 'F'))
    {
        m = m - 'A' + 10;
    }
    else if((m >= 'a')&&(m <= 'f'))
    {
        m = m - 'a' + 10;
    }
    else
    {
        ErrFlag = 1;
    }
    n = m << 4;
    m = source[start + 1];
    if((m >= '0')&&(m <= '9'))
    {
        m -= '0';
    }
    else if((m >= 'A')&&(m <= 'F'))
    {
        m = m - 'A' + 10;
    }
    else if((m >= 'a')&&(m <= 'f'))
    {
        m = m - 'a' + 10;
    }
    else
    {
        ErrFlag = 1;
    }
    n = n + (m & 0x0F);
    return n;
}

使用特权

评论回复
11
sdpz| | 2011-4-22 08:23 | 只看该作者
额,读写数据的函数应该使用标准C库里面的才好移植啊

使用特权

评论回复
12
sdpz| | 2011-4-22 08:26 | 只看该作者
上传一个TKStudio自带的hex2bin工具。如果不能运行,可到官网下载TKStudio。

http://www.embedtools.com/pro_tools/emluator/studio.asp

TrussConvert.rar

238.06 KB

使用特权

评论回复
评分
参与人数 1威望 +5 收起 理由
大秦正声 + 5
13
dahua123| | 2013-4-25 10:40 | 只看该作者
适合所有的 转Bin  吗

使用特权

评论回复
14
yang_2006| | 2014-1-20 21:04 | 只看该作者
sdpz 发表于 2011-4-22 08:26
上传一个TKStudio自带的hex2bin工具。如果不能运行,可到官网下载TKStudio。

http://www.embedtools.com/p ...

hex文件大转换不了。out of memory

使用特权

评论回复
15
大秦正声| | 2015-5-4 16:41 | 只看该作者
sdpz 发表于 2011-4-22 08:26
上传一个TKStudio自带的hex2bin工具。如果不能运行,可到官网下载TKStudio。

http://www.embedtools.com/p ...

赞!

使用特权

评论回复
16
jiangzb520| | 2018-6-1 08:57 | 只看该作者
sdpz 发表于 2011-4-22 08:26
上传一个TKStudio自带的hex2bin工具。如果不能运行,可到官网下载TKStudio。

http://www.embedtools.com/p ...

谢谢,这个大神,我的win10 32正好可以识别这个软件,其他到下载下来无效,闪退

使用特权

评论回复
17
2547532| | 2020-5-23 10:07 | 只看该作者
sdpz 发表于 2011-4-22 08:26
上传一个TKStudio自带的hex2bin工具。如果不能运行,可到官网下载TKStudio。

http://www.embedtools.com/p ...

赞,正好有用,多谢

使用特权

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

本版积分规则

190

主题

1614

帖子

4

粉丝