读懂 Intel Hex 文件

本文深入解析了IntelHex文件格式,包括其结构、组成部分及其在嵌入式系统中的应用。详细介绍了IntelHex文件的六域构成:StartCode、Bytecount、Address、Recordtype、Data与Checksum,并解释了扩展段地址记录的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、问题描述

在生成Atmega128的固件程序时,常指定格式为"intel-extended",如下:

今天要生成一版新的含Boot的程序,这就涉及到hex的拼接工作。

那首先要搞清楚的问题就是intel hex的具体格式是什么?

 

2、 intel hex 的具体格式

Intel Hex文件是遵循Intel Hex文件格式的ASCII文本文件。
在Intel Hex 文件的每一行中都包含了一个hex记录。这些记录是由一些代表机器语言代码和常量的16进制数据组成。

Intel Hex文件常用来传输要存储在ROM、EPROM或者Flash中的程序和数据。大部分的EPROM编程器都能使用Intel Hex文件。

Intel Hex由任意数量的十六进制记录组成。每个记录包含6个域,它们按以下格式排列。

Start Code(冒号): 每个 Intel HEX 记录都由冒号开头
Byte count(本行数据长度):是数据长度域,它代表记录当中数据字节的数量
Address(本行数据的起始地址):是地址域,它代表记录当中数据的起始地址
Record type(数据类型): 是代表HEX记录类型的域,它可能是以下数据当中的一个:
  00-数据记录
  01-文件结束记录
  02-扩展段地址记录
  03-开始段地址记录
  04-扩展线性地址记录
  05-开始线性地址记录
Data(数据): 是数据域,一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域中指定的数字相符
Checksum(校验码): 是校验和域,它表示这个记录的校验和.校验和的计算是通过将记录当中所有十六进制编码数字对
的值相加,以256为模进行补足。

注:目前我看到的hex文件末尾都以以下内容结束。
:00000001FF

 

3、关于扩展段地址记录

第一行中的021000 ,其中的02表示扩展段地址记录,扩展段的地址为1000。
第二行至以下行中的所有地址如,E000 其实际地址为0xE000 + 0x10000 = 0x1E000

v0.8.0: 去掉“直接Hex文件编辑”功能的128K字节限制(其他功能仍然有128KB限制) v0.7.0: 一些小的调整 V0.6.1: 调整另存对话框,去掉无效选项 V0.6.0: 加入文件拖放功能。 V0.5.5:修正建立新的配置文件时,保存失败的Bug。 V0.5.4:修正数制计算器中输入A-F时的bug,增加源数据存储类型选择。 0.5.3:修改图标,部分界面。 0.5.2: About 界面修改,添加更新网址。 0.5.1:修正块另存时新建文件保存失败的Bug。 0.5:新增文件内、文件间块移动、复制、交换、另存等功能 0.4:新增转换为二进制后比较功能 本人继MCUTool以后的另外一个单片机开发实用工具软件,用于单片机调试过程中简单的参量修改,省略修改源代码、再编译的过程,直接修改目标文件。尤其是对eeprom数据的修改、调整更为方便实用。 本软件编写的目的是用来编辑存放于单片机 Flash 或 EEPROM 中的数据,支持 Intel Hex 格式以及 Motorola S 格式的数据文件,也可以编辑二进制的内存映射文件。数据的编辑可以通过常量定义的方式,也可以通过内存映射的方式进行。 同时可以在两种16进制格式文件之间相互转换。格式转换以行数据为单位,以确保转换前后数据不会改变。 另外提供十进制、十六进制转换器,转换结果可以作为普通显示或作为内存映射,作内存映射时可以选择多字节数据的存储方式。 二进制比较功能,通过不同工具生成的Hex文件可能因为格式而无法进行文本方式比较,本工具可以首先转换为二进制数据再进行比较,免去自行转换的麻烦。 单文件内/双文件间的块操作,包括复制、移动、交换、另存等等,方便实验数据提取、复制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值