HEX 文件

发表于 2009/6/26 13:01:05

近来写C8051 Boot代码,由于下载数据需要使用bin文件, 但是keil目前只能生成hex的格式,无奈之下上网找了半天,可没有方便的,无奈之下只能自己写一个了.
 首先需要了解以下HEX的文件信息: 
  Intel HEX文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是一个HEX记录,由十六进制数组成的机器码或者数据常量。Intel HEX文件经常被用

于将程序或数据传输存储到ROM、EPROM,大多数编程器和模拟器使用Intel HEX文件。 
  HEX格式文件以行为单位,每行由":"(0x3A)开始,以回车键结束(0x0D,0x0A)。行内的数据都是由两个字符表示一个16进制字节,比如"01"就表示数0x01;"0A"就

表示0x0A。对于16位的地址, 则高位在前低位在后, 比如地址0x010A,在HEX格式文件中就表示为字符串"010a". 下面为HEX文件中的一行: 
 :10000000FF0462FF051EFF0A93FF0572FF0A93FFBC 
 : 号表示一行的开始 
 : 后的第1, 2个字符表示本行包含的数据的长度,这里就是0x10即16个. 
 : 后的第3, 4, 5, 6个字符表示数据存储的起始地址,这里表示从0x0000地址开始存储16个数据,其中高位地址在前,低位地址在后。 
 : 后的第7, 8个字符表示数据的类型
  00 ----数据记录        
  01 ----文件结束记录 
  02 ----扩展段地址记录 
  04 ----扩展线性地址记录

 这里就是0x00即为普通数据记录。 
 自后的32个字符就是本行包含的数据,每两个字符表示一个字节数据,总共有16个字节数据跟行首的记录的长度相一致。 
 最后两个字符表示校验码。 
 
 每个HEX格式的最后一行都是固定为:
 :00000001FF

 以上的信息其实就足够进行HEX转BIN格式的程序的编写。
 我只处理数据类型为0x00及0x01的情况。0x02, 0x04表示对应的存储地址超过了64K,我没有用到.




这是生成的HEX文件 
注意: 倒数第2行的 
:031000001020308D 
 03                3个数据 
   1000            地址0x1000 
       00          数据记录  
         10        数据0x10 
           20      数据0x20 
             30    数据0x30 
               8D  校验和 



:1000000012C02BC02AC029C028C027C026C025C0C6 
:1000100037C023C022C021C020C01FC01EC01DC0C9 
:100020001CC01BC01AC011241FBECFE5D4E0DEBF28 
:10003000CDBF10E0A0E6B0E0E4E4F1E002C005903E 
:100040000D92AE37B107D9F710E0AEE7B0E001C0CE 
:100050001D92A038B107E1F762C0D2CF019782307C 
:100060009105E4F70895CF93DF93EC01892B29F0F4 
:1000700088EE93E0F3DF2197D9F7DF91CF910895D0 
:100080001F920F920FB60F9211248F939F9380911E 
:100090007E0090917F009DBD8CBD85B391E0892746 
:1000A00085BB9F918F910F900FBE0F901F90189559 
:1000B000CF93DF931FBC82E08EBD80E090E03AD00A 
:1000C000282F882331F1C0E0D0E0E22FEF7089F0D3 
:1000D00089B7846089BFE150FF27EE0FFF1FE05A08 
:1000E000FF4F8081918190937F0080937E009DBD22 
:1000F0008CBD22952F708AE8289FC0011124B3DFA0 
:1001000089B78B7F89BF2196CE0114D0282F8823F1 
:10011000E1F688EE93E0A7DFDF91CF910895CFE578 
:10012000D4E0DEBFCDBF81E084BB8FEF85BB789488 
:10013000BFDFFECFE199FECF9FBB8EBBE09A992730 
:040140008DB30895DE 
:1001440044FCACFC09FD34FD82FDC8FD06FE22FE24 
:0E01540056FE85FE9AFEC1FEE4FE03FF11FF7B 
:031000001020308D 
:00000001FF 

### HEX 文件概述 HEX 文件是一种常见的二进制数据表示形式,通常用于嵌入式开发领域。其主要功能是以 ASCII 文本的形式存储机器码指令或其他数据[^1]。这种文件格式便于传输、调试以及烧录到目标设备中。 #### HEX 文件的格式特点 HEX 文件采用十六进制编码方式记录数据,每一行都遵循特定的结构化格式。典型的 Intel HEX 格式由多个字段组成,包括起始冒号 `:`、字节数、地址、记录类型、实际数据和校验和[^2]。以下是 Intel HEX 的基本格式说明: - **起始符 (`:`)**:每行以冒号开头。 - **字节数**:表示该行有效数据字节的数量。 - **地址**:指定数据加载的目标内存位置。 - **记录类型**:定义当前行的作用(如数据、结束标志等)。 - **数据**:具体的十六进制数值序列。 - **校验和**:验证数据完整性的计算值。 示例代码展示了一条标准的 Intel HEX 记录: ``` :020000040800F7 ``` 其中各部分含义如下: - 起始符 `:` 表明这是 HEX 数据的一行; - 字节数 `02` 表示后续有 2 个数据字节; - 地址 `0000` 是指针指向的位置; - 类型 `04` 定义此行为扩展线性地址记录; - 数据 `0800` 提供具体信息; - 校验和 `F7` 确保无误传。 #### HEX 文件的主要用途 在嵌入式系统设计过程中,HEX 文件扮演着重要角色。它们被广泛应用于微控制器编程阶段,作为连接源代码与硬件之间的桥梁[^3]。例如,在使用 Keil 编程环境时,开发者可以配置项目参数来自动生成所需的 HEX 输出文件[^4]。 当涉及到固件更新或者远程升级场景时,由于网络带宽限制等原因,直接操作原始二进制可能会遇到困难;此时利用紧凑高效的 HEX 形式则显得尤为便利——不仅易于解析处理而且兼容性强。 另外值得注意的是,尽管两者同属可执行映像范畴之内,但相比于 BIN (Binary),HEX 更加灵活多样因为它包含了额外辅助信息比如绝对定位指示器等等^。 #### 如何生成 HEX 文件? 通过集成开发环境(IDE)设置适当选项即可轻松完成这一过程。以 ARM Cortex-M 微处理器为例,借助 MDK-ARM 工具链中的 fromelf 实用程序能够实现自动化转换流程: ```bash "C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe" --bin --output "...\SXD-FBJC.bin" "...MDK-ARM\SXD-FBJC\SXD-FBJC.axf" ``` 上述脚本片段展示了如何调用命令行接口将 ELF(Arm Executable Linkable Format)对象转储成适合下载至闪存芯片上的纯文本版本。 此外还可以考虑其他方法诸如编写专门的应用软件(QT GUI界面应用程序), 来满足特殊需求下的 hex-to-bin 或者相反方向的任务执行情况. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值