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

[复制链接]
 楼主| xlsbz 发表于 2011-4-21 00:27 | 显示全部楼层 |阅读模式
网上下载了几个  都不咋好用  

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

这几个工具好像不支持  

谁能提供个 好用的支持各种情况的 工具啊??

多谢
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的意见
yewuyi 发表于 2011-4-21 09:47 | 显示全部楼层
都不需要什么软件的,直接把HEX文件导入编程器软件,一般编程器软件都支持导出数据的,导出时选择BIN格式即可
 楼主| xlsbz 发表于 2011-4-21 21:52 | 显示全部楼层
都不需要什么软件的,直接把HEX文件导入编程器软件,一般编程器软件都支持导出数据的,导出时选择BIN格式即可
yewuyi 发表于 2011-4-21 09:47


KEIL51 导不出来啊
 楼主| xlsbz 发表于 2011-4-21 21:55 | 显示全部楼层
LZ,搞清楚ROM(FLASH)和RAM再来吧。hex和bin没法区分是数据的存储域,都是指定地址的数据,这个地址在哪个域就不知道了,只能看实际的器件了
zhaoyu2005 发表于 2011-4-21 09:16


嗨  对牛谈了....

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

这几个工具好像不支持”


这话说得 似乎没问题,即便有问题。看我用了“好像”这个词了么?
 楼主| xlsbz 发表于 2011-4-21 21:56 | 显示全部楼层
使用RAM还是XRAM跟转换没有任何关系 网上工具很多 可以参考2L的意见
原野之狼 发表于 2011-4-21 09:41


我导出来的HEX文件 没用XRAM的话 用网上的工具可以转换成bin 。用了XRAM 就提示错误了
 楼主| 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软件吧  

稳定稳定。

一定要稳定啊!!
ejack 发表于 2011-4-22 08:05 | 显示全部楼层
理论上来说用不用外部RAM不会产生额外的代码块。所以我对你说的“开了外部RAM后不好用”有所怀疑。请LZ把开外部RAM之前和之后的hex文件贴上来,大家分析分析。
另外,hex的格式其实不复杂,可以认为是二进制代码的一种格式化文本表述。
贴个TurboC 2.0下的转换源程序。此程序不太规范、适用范围也很狭窄,不过可以参考一下。

  1. /**********************************************************************
  2. 文件名:HEX2BIN
  3. 功能: 将Intel HEX格式的文件转换为二进制文件
  4.         不计算校验和
  5. ***********************************************************************/
  6. #include "stdio.h"
  7. #include "fcntl.h"
  8. #include "io.h"
  9. #define ROWSIZE 80
  10. int SourceP;    /*源文件指针*/
  11. int TargetP;    /*目标文件指针*/
  12. unsigned char source[ROWSIZE];  /*声明数组,用以存放行文本*/
  13. unsigned char target[32];       /*存放目标代码*/
  14. unsigned char ErrFlag = 0;
  15. unsigned char EndFlag = 0;
  16. unsigned char Text2Bin(unsigned char);

  17. void main()
  18. {
  19. char In_FileName[15], Out_FileName[15];
  20. unsigned char i;
  21. long SrcOff = 0;
  22. long TgtOff = 0;
  23. struct
  24. {
  25.      unsigned char ByteNum;
  26.      unsigned char TotalNum;
  27. }Row;

  28. printf("Input HEX filename:\n");
  29. scanf("%s",In_FileName);
  30. strcpy(Out_FileName, In_FileName);
  31. strcat(In_FileName, ".hex");
  32. strcat(Out_FileName, ".bin");
  33. printf("Source HEX file:%s\n",In_FileName);
  34. printf("Target BIN file:%s\n",Out_FileName);

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

  43. /*以无缓冲方式打开目标文件*/
  44. TargetP = open(Out_FileName, O_BINARY | O_RDWR);
  45. if(TargetP==-1)
  46. {
  47.   TargetP = _creat(Out_FileName, 1);
  48.   if(TargetP==-1)
  49.   {
  50.       close(SourceP);
  51.       printf("Can not open target! Enter to return.\n");
  52.       getch();
  53.       exit(1);
  54.   }
  55. }

  56. /*读入源文件文本,转换为二进制写入目标文件*/
  57. while(EndFlag==0)
  58. {
  59.      lseek(SourceP, SrcOff, SEEK_SET);
  60.      read(SourceP, source, ROWSIZE);
  61.      if(source[0]!=':')
  62.      {
  63.          EndFlag = 1;
  64.          break;
  65.      }
  66.      for(i = 0; i < ROWSIZE; i++)    /*找到下一个有效行*/
  67.      {
  68.          if(source[i]==':')
  69.          {
  70.              if((source[i-2]==0x0D)&&(source[i-1]==0x0A))
  71.              {
  72.                  break;
  73.              }
  74.          }
  75.      }
  76.      if(i==ROWSIZE)  /*找不到,则结束转换过程*/
  77.      {
  78.          EndFlag = 1;
  79.          break;
  80.      }
  81.      SrcOff = SrcOff + i;        /*源文件偏移量指向下一行*/
  82.      Row.ByteNum = Text2Bin(1);  /*代码字节数*/
  83.      if(Row.ByteNum==0)      /*行字节数为0,是标准的结束方式*/
  84.      {
  85.          EndFlag = 1;
  86.          break;
  87.      }
  88.      Row.TotalNum = i;           /*文本行字节数*/
  89.      TgtOff = Text2Bin(3);
  90.      TgtOff = TgtOff * 0x100;
  91.      TgtOff = TgtOff + Text2Bin(5);
  92.      if((TgtOff<0)||(TgtOff>0xFFFF)) /*校验偏移量*/
  93.      {
  94.       close(SourceP);
  95.       close(TargetP);
  96.       printf("Out of range:%d Enter to return.\n",TgtOff);
  97.       getch();
  98.       exit(1);
  99.      }
  100.      for(i = 0; i < Row.ByteNum; i++)    /*将文本转换为二进制存入数组*/
  101.      {
  102.          target[i] = Text2Bin(9 + 2 * i);
  103.      }
  104.      lseek(TargetP, TgtOff, SEEK_SET);
  105.      write(TargetP, target, Row.ByteNum);
  106.     }

  107. close(SourceP);
  108. close(TargetP);
  109. printf("Conversion complete.\n");
  110. }
  111. unsigned char Text2Bin(unsigned char start)
  112. {
  113.     unsigned char m, n;
  114.    
  115.     m = source[start];
  116.     if((m >= '0')&&(m <= '9'))
  117.     {
  118.         m -= '0';
  119.     }
  120.     else if((m >= 'A')&&(m <= 'F'))
  121.     {
  122.         m = m - 'A' + 10;
  123.     }
  124.     else if((m >= 'a')&&(m <= 'f'))
  125.     {
  126.         m = m - 'a' + 10;
  127.     }
  128.     else
  129.     {
  130.         ErrFlag = 1;
  131.     }
  132.     n = m << 4;
  133.     m = source[start + 1];
  134.     if((m >= '0')&&(m <= '9'))
  135.     {
  136.         m -= '0';
  137.     }
  138.     else if((m >= 'A')&&(m <= 'F'))
  139.     {
  140.         m = m - 'A' + 10;
  141.     }
  142.     else if((m >= 'a')&&(m <= 'f'))
  143.     {
  144.         m = m - 'a' + 10;
  145.     }
  146.     else
  147.     {
  148.         ErrFlag = 1;
  149.     }
  150.     n = n + (m & 0x0F);
  151.     return n;
  152. }

sdpz 发表于 2011-4-22 08:23 | 显示全部楼层
额,读写数据的函数应该使用标准C库里面的才好移植啊
sdpz 发表于 2011-4-22 08:26 | 显示全部楼层
上传一个TKStudio自带的hex2bin工具。如果不能运行,可到官网下载TKStudio。

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

参与人数 1威望 +5 收起 理由
大秦正声 + 5

查看全部评分

dahua123 发表于 2013-4-25 10:40 | 显示全部楼层
适合所有的 转Bin  吗
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
大秦正声 发表于 2015-5-4 16:41 | 显示全部楼层
sdpz 发表于 2011-4-22 08:26
上传一个TKStudio自带的hex2bin工具。如果不能运行,可到官网下载TKStudio。

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

赞!
jiangzb520 发表于 2018-6-1 08:57 | 显示全部楼层
sdpz 发表于 2011-4-22 08:26
上传一个TKStudio自带的hex2bin工具。如果不能运行,可到官网下载TKStudio。

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

谢谢,这个大神,我的win10 32正好可以识别这个软件,其他到下载下来无效,闪退
2547532 发表于 2020-5-23 10:07 | 显示全部楼层
sdpz 发表于 2011-4-22 08:26
上传一个TKStudio自带的hex2bin工具。如果不能运行,可到官网下载TKStudio。

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

赞,正好有用,多谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

190

主题

1614

帖子

4

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