tag 标签: hex

相关博文
  • 热度 17
    2014-2-18 22:02
    1570 次阅读|
    0 个评论
    Intel HEX文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是一个HEX记录 由十六进制数组成的机器码或者数据常量,Intel HEX文件经常被用于将程序或数据传输 存储到ROM.EPROM,大多数编程器和模拟器使用Intel HEX文件.   记录格式   一个Intel HEX文件可以包含任意多的十六进制记录,每条记录有五个域,下面是一个记录的格式.   :llaaaatt cc   每一组字母是独立的一域,每一个字母是一个十六进制数字,每一域至少由两个十六进制数字组成,下面是字节的描述.   :冒号 是每一条Intel HEX记录的开始   ll 是这条记录的长度域,他表示数据(dd)的字节数目.   aaaa 是地址域,他表示数据的起始地址 如果是数据记录,这表示将要烧录的这条记录中的数据在EPROM中的偏移地址, 对于不支持扩展段地址和扩展线性地址的,如89C51,这就是此条记录的起始地址   tt 这个域表示这条HEX记录的类型,他有可能是下面这几种类型 00 ----数据记录  01 ----文件结束记录 02 ----扩展段地址记录 04 ----扩展线性地址记录   dd 是数据域,表示一个字节的数据,一个记录可能有多个数据字节,字节数目可以 查看ll域的说明   cc 是效验和域,表示记录的效验和,计算方法是将本条记录冒号开始的所有字母对   不包括本效验字和冒号 所表示的十六进制数字 一对字母表示一个十六进制数,这样的一个十六进制数为一个字节   都加起来然后模除256得到的余数最后求出余数的补码即是本效验字节cc. 例如: :0300000002005E9D cc=0x01+NOT((0x03+0x00+0x00+0x00+0x02+0x00+0x5E)%0x100)=0x01+0x9C=0x9D   C语言描述: UCHAR cc; cc=(UCHAR)~(0x03+0x00+0x00+0x00+0x02+0x00+0x5E); cc++; 数据记录   Intel HEX文件由若干个数据记录组成,一个数据记录以一个回车和一个换行结束 回车为0x0d换行为0x0a   比如下面的一条数据记录 :10246200464C5549442050524F46494C4500464C33   10 是此行记录数据的字节数目 2462 是数据在内存将要烧写的eprom地址中的起始地址 00 是记录类型00(是一个数据记录) 464C 到 464C 是数据 33 是此行记录的效验和   扩展线性地址记录(HEX386) 扩展线性地址记录也可称为 32位地址记录 和 HEX386记录,这个纪录包含高16(16-31位)位数据地址,这种扩展的线性记录总是有两个字节数据,像下面这样:   :02000004FFFFFC 02 是记录的数据字节数目 0000 是地址域这在扩展地址记录中总是0000 04 是记录类型04(扩展地址记录) FFFF 是高16位地址 FC 是记录效验和,计算方法如下: 01h + NOT(02h + 00h + 00h + 04h + FFh + FFh)   当一个扩展线性地址记录被读到后,扩展线性地址记录的数据区域将被保存 并应用到后面从Intel HEX文件中读出的记录,这个扩展线性记录一直有效, 直到读到下一个扩展线性记录.     绝对内存地址 = 数据记录中的地址 + 移位后的扩展线性地址     下面举例说明这个过程   从数据记录的地址域得到地址 2462 从扩展线性地址记录的地址域得到地址 FFFF 绝对内存地址 FFFF2462   扩展段地址记录 (HEX86)    扩展段地址记录也被称为 HEX86记录, 包含 4-19位的数据地址段, 这个扩展段地址记录总是有两字节数据,如下:   :020000021200EA 02 是 记录中的数据字节数目 0000 是地址域,在扩展段地址记录中,这个域总是0000 02 是记录类型02(扩展段地址的标示) 1200 是该段的地址 EA 是效验和 计算如下: 01h + NOT(02h + 00h + 00h + 02h + 12h + 00h).   当扩展段地址记录被读后,扩展段地址将被存储并应用到以后从Intel HEX文件读出的记录,这个段地址一直有效直到读到下一个扩展段地址记录   绝对内存地址 = 数据记录中的地址 + 移位后的扩展段地址     数据记录中的地址域 移位后扩展段地址记录中的地址域   下面举例说明这个过程   从数据记录的地址域得到地址 2 4 6 2 从扩展段地址记录的地址域得到地址 1 2 0 0 绝对内存地址 0 0 0 1 4 4 6 2   文件结束记录(EOF) 一个Intel HEX文件必须有一个文件结束记录,这个记录的类型域必须是01, 一个EOF记录总是这样: :00000001FF 00是记录中数据字节的数目 0000这个地址对于EOF记录来说无任何意义 01记录类型是01(文件结束记录标示) FF是效验和计算如下 01h + NOT(00h + 00h + 00h + 01h). ========================   总结     形如 :BBAAAATTHHHH...HHHHCC   BB: Byte AAAA:数据记录的开始地址,高位在前,地位在后 因为这个格式只支持8bits,地址被倍乘 所以,为了得到实际的PIC的地址,需要将 地址除以2 TT: Type 00 数据记录 01 记录结束 04 扩展地址记录(表示32位地址的前缀,当然这种只能在 INHX32) HHHH:一个字(Word)的数据记录,高Byte在前,低Byte在后 TT之后,总共有 BB/2 个字 的数据 CC: 一个Byte的CheckSum     因为PIC16F873A只有4K的程序空间   所以,不会有 TT=04的 Linear Address Record
  • 热度 19
    2013-12-1 09:34
    1939 次阅读|
    0 个评论
    染指C#, 入门时觉得比较方便,但数字,数值,字符串之间的转换有不太容易搞清楚。我整理了一个简单的类,让大家指点一下。我使用静态类,好处就是不用声明,就能直接使用。有了这个类,字串符与16进制之间的那点事就好搞多了。       static class HConvert     {             // 将字串所代表的值转换成数组, 右对齐         public static byte res;             if (len == 0)                 return null;             else                 res = new byte ;             string s;             int i;             for (i = 0; i res.Length - 1; i++)             {                 s = str.Substring(i * 2, 2);                 try                 {                     res = Convert.ToByte(s, 16);                 }                 catch                 {                     res = 0x00;                 }             }             s = str.Substring(i * 2, str.Length - i * 2);             try             {                 res = Convert.ToByte(s, 16);             }             catch             {                 res = 0x00;             }             return res;         }           // 将数组打印为16进制的字串, ch用于指令间隔字符,比如' '空格         public static string Hexbytes2String(byte .ToString("X2") + ch);             }             sb.Remove(sb.Length - 1, 1);             string s = sb.ToString();               return s;         }           // 将一串16进制显示的字符转换成其字符串,如41 -A         public static string Hexstring2String(string str)         {             byte[] bs = String2Hexbytes(str);             StringBuilder sb = new StringBuilder();             foreach (byte b in bs)             {                 char a = (char)b;                 sb.AppendFormat("{0} ", a);             }               return sb.ToString();         }     }   当然,还有Convert.toint16, .ToString("X4", var)等方法也是非常非常有用的。     (尊重劳动成果,转载请注意出处  原方链接 )     NewBit Studio 2013  
  • 热度 18
    2013-11-27 19:15
    5449 次阅读|
    0 个评论
    这个工具是与HexToBin功能相反的工具,非常相似的界面。功能和特别也非常相似。     软件功能: 1. 可以将镜像文件(. bin )转换为inter-extended 文档(. hex ),是单片机开发中的常用格式。 2. 没有64kb的限制 3. 可视界面,支持输入文件路径,输出文件路径及名称设定 4. 绿色软件,直接运行   软件运行需求: 1. win xp, win vista, win7, win8 2. 安装.NET 4 3. 支持64位系统 C#开发     软件主页: http://blog.sina.com.cn/newbittech   下载地址: 百度云   http://pan.baidu.com/share/link?shareid=28277914uk=339018285 新浪微盘  http://vdisk.weibo.com/s/BIZlkEwPqiHzI     ---------------------------------------------------------------------------------------------   第二个小工具,请大家多提意见!   NewBit Studio 2013     转自  http://blog.sina.com.cn/s/blog_adcc88040101fg0h.html  
  • 热度 19
    2012-3-27 19:43
    3512 次阅读|
    0 个评论
    固件调试完毕后,可以将其转化为IIC文件烧写到EEPROM中,采用C2方式启动,这样68013就会从EEPROM中获取程序和VID、PID,不需要每次上电都下载固件了。 首先需要将KEIL编译好的hex文件转化为iic文件,可以使用cypress提供的hex2bix, 在Keil C软件中,选择Project—Options for Target 'Targer 1',选择Output选项,选中Run User Program #1,并在其中填写命令 c:\cypress\usb\bin\hex2bix -i -f 0xC2 -o bulkloop.iic bulkloop.hex -i表示要生成iic文件,-f表示烧写后采用C2方式启动(程序、VID、PID都从EEPROM读取),后面依次是要生成IIC文件的文件名和源文件的文件名,关于其他参数的用法可以参见hex2bix的帮助。
  • 热度 19
    2012-1-29 13:01
    3831 次阅读|
    0 个评论
    在cypress开发包的安装目录下有一个工具 Cypress\USB\Bin\Hex2Bix.exe,并且在Util目录下有他的源代码。你可以用这个工具进行hex到iic文件的转换。      把要转的hex文件复制到Hex2Bix.exe的同一个文件夹里面, 运行方法:hex2bix -i -f 0xC2 -o output.iic input.hex (开始-运行-浏览-找到Hex2Bix.exe  后面再添加上-i -f 0xC2 -o output.iic input.hex )      其中 -i 表示你要转为iic文件,-f 0xC2 表示你要在iic文件的首地址加上0xC2标志,烧写后,即可以0xC2方式加载了。 -o 表示你的输出文件名,没有标识的input.hext是你要转换的文件。 另外你也可以将这句执行语句加到output设置中,选中run User Program #1, 并加入.那么每次编译后就会执行转换了. 另外你可以直接用build -i,请参考build.bat, setenv.bat文件。  
相关资源