HEX文件格式解析

Hex文件是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex文件的方式由很多种,可以通过不同的编译器将C程序或者汇编程序编译生成hex。

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

本行数据长度本行数据起始地址(偏移地址)数据类型数据校验码
 1 byte2 bytes1 byten byte1 byte
020000040801

 

F1

 

在上面的数据类型后2种记录(04,05)都是用来提供地址信息的。每次碰到这2个记录的时候,都可以根据记录计算出一个“基”地址。对于后面的数据记录,计算地址的时候,都是以这些“基”地址为基础的。

以我们的语句为例:第1条记录的长度为02,LOAD OFFSET为0000,RECTYPE为04,说明该记录为扩展段地址记录。数据为0801,校验和为F1。

从这个记录的长度和数据,我们可以计算出一个基地址,这个地址为(0x0801 << 16) = 0x0801 0000 ,后面的数据记录都以这个地址为基地址。

每一组字母 对应 一 个 不同的域,每一 个 字母 对应 一 个 十六 进 制 编码 的 数 字。每一 个 域由至少 两个 十六 进制 编码数 字 组 成, 它们构 成一 个 字 节 ,就像以下描述的那 样:

:(冒号)每个Intel HEX 记录 都由冒 号开头 ;
LL 是 数 据 长 度域, 它 代表 记录当 中 数 据字 节 (dd) 的 数量 ;
aaaa 是地址域, 它代表 记录当 中 数据的起始地址;
TT是代表HEX 记录类 型的域 , 它 可能是以下 数 据 当 中的一 个:
    00 – 数 据 记录(Data Record)
    01 – 文件结 束 记录(End of FileRecord)
    02 – 扩展段地址 记录(ExtendedSegment Address Record)

03 – 开始段地址 记录(Start Segment Address Record)
    04 – 扩展 线 性地址 记录(Extended Linear Address Record)

05 – 开始线性地址 记录(Extended Segment Address Record)
dd 是数 据域 , 它 代表一 个 字 节 的 数 据. 一 个记录 可以有 许 多 数 据字 节 . 记录当 中 数 据字 节 的 数 量必 须 和数 据 长 度域(ll) 中指定的 数字相符.
cc 是校验 和域 , 它 表示 这个记录 的校 验 和. 校 验 和的 计 算是通 过将记录当 中所有十六 进 制 编码数 字 对 的 值相加, 以256 为 模 进 行以下 补 足.

表示为:“:[1字节长度][2字节地址][1字节记录类型][n字节数据段][1字节校验和] ”

 

具体根据记录类型分析如下:

(1)数据记录”00”

Intel HEX文件由任意数 量以回车换行符结束的数据记录组成数据记录外观如下:
    :10246200464C5549442050524F46494C4500464C33
其中:10 是这个记录当中 数 据字 节 的 数量.即0x10 ;
     2462 是数据 将 被下 载 到存 储 器 当中的地址.即0x2462 ;

00 是记录类型( 数 据 记录).即0x00 ;
464C…464C是 数据.分别代表0x46,0x4C... ;
33 是这个记录的校 验和即0x33;计算方法如下:256D-(10H+24H+62H+00H+46H+4CH+55H+49H+44H+20H+50H+52H+4FH+46H+49H+4CH+45H+00H+46H+4CH)/100H=33H;

(2)文件结束(EOF)”01”

Intel HEX文件必须以文件结束(EOF) 记录结束这个记录的记录类的值必须是01.EOF 记录 外 观总是如下:
   :00000001FF
其中:00 是记录当中 数 据字 节 的 数量.
   0000 是数据被下载到存储器当中的地址. 在文件结束记录当中地址是没有意义,被忽略的.0000h 是典型的地址;
   01 是记录类型 01( 文件 结 束 记录)
   FF 是 这个记录 的校 验 和, 计算方法如下: 256D-(00H+00H+00H+01H)=FFH;

(3)扩展线性地址记录(HEX386) ”04”

由于每行标识数据地址的只有2Byte,所以最大只能到64K,为了可以保存高地址的数据,就有了Extended Linear AddressRecord。如果这行的数据类型是0x04,那么,这行的数据就是随后数据的基地址。

扩展线性地址记录也叫作32位地址记录或HEX386记录.这些记录含数据的高16位扩展线性地址记录总是有两个数据字节,外观如下:
    :02000004FFFFFC

其中:02 是这个记录当中 数 据字 节 的 数量.
0000 是地址域, 对于 扩 展 线 性地址 记录 , 这个 域 总是0000.
04 是记录类型 04( 扩 展 线 性地址 记录)
FFFF 是地址的高16 位.
FC 是这个记录的校 验 和, 计算如下: 256D-(02H+00H+00H+04H+FFH+FFH)/100H=FFH;

当一 个扩展 线 性地址记录被读 取, 存 储于数据域的扩展线性地址被保存,它被应于

从 Intel HEX 文件 读取 来 的 随 后的 记录 . 线 性地址保持有效, 到 它 被另外一 个扩址记录 所改 变。

通 过 把 记录当 中的地址域 与 被移位的 来 自 扩 展 线 性地址 记录 的地址 数 据相加

 获 得 数 据 记录 的 绝对 存 储器地址。

以下的例子演示了这个过 程:

:0200000480007A    //数据记录的绝对存储器地址高16位为0x8000               

:100000001D000A00000000000000000000000000C9

:100010000000000085F170706F0104005D00BD00FC

第一行,是Extended Linear Address Record,里面的数据,也就是基地址是0x8000,第二行是DataRecord,里面的地址值是0x0000。那么数据1D000A00000000000000000000000000(共16个字节)要写入FLASH中的地址为 (0x8000<< 16)| 0x0000,也就是写入FLASH的0x80000000这个地址;第三行的数据写入地址为0x80000010.当一个HEX文件的数据超过64k的时候,文件中就会出现多个Extended Linear Address Record。

(4)扩展段地址记录(HEX86)“02“

扩展段地址记录也叫HEX86 记录 , 它包括4-19 位数据地址段. 扩展段地址记总是有两

个数 据字节 , 外观如下:
:020000021200EA
其中:02 是记录当中 数 据字 节 的 数量;
0000 是地址域. 对于 扩 展段地址 记录 , 这个 域 总是0000;
02 是记录类型 02( 扩 展段地址 记录);
1200 是地址段;
EA 是这个记录的校 验 和;

当一 个扩 展段地址 记录 被 读 取, 存 储 于 数 据域的 扩 展段地址被保存, 它 被 应 用于 从 Intel HEX 文件 读 取 来的 随 后的 记录 . 段地址保持有效, 直到 它 被另外一 个扩 展地址 记录 所改 变。

通 过 把 记录当 中的地址域 与 被移位的 来 自 扩 展段地址 记录 的地址 数 据相加 获 得 数 据 记录 的 绝对 存 储器地址。
    以下的例子演示了这个过 程..
来自 数 据 记录地址域的地址          2462
扩展段地址 记录数据域             +  1200
                               ---------
绝对存 储 器地址                   00014462


Intel HEX 文件例子:
下面是一个 完整的Intel HEX 文件的例子:
:10001300AC12AD13AE10AF1112002F8E0E8F0F2244
:10000300E50B250DF509E50A350CF5081200132259
:03000000020023D8
:0C002300787FE4F6D8FD7581130200031D
:10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016
:04003F00A42EFE22CB
:00000001FF

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: VC Hex文件格式解析是指对VC(Version Control)系统中的Hex文件进行解析和分析的过程。 首先,VC是一种用于版本控制和代码管理的工具,它采用二进制格式的Hex文件来存储源码、修改记录和版本信息等。Hex文件是一种十六进制形式的文本文件,可以通过特定的解析算法将其转换为可读的源代码或其他文件。 在解析VC Hex文件时,我们需要了解其基本结构和格式。Hex文件通常由多个记录(Record)组成,每个记录包含了不同的类型和数据内容。常见的记录类型包括:数据记录、扩展段地址记录、起始段地址记录和结束记录等。 数据记录包含了实际的源代码或其他数据信息,其格式包括起始地址、数据长度、数据内容和校验和等。扩展段地址记录用于扩展程序的地址空间,起始段地址记录指定程序的入口地址,结束记录表示文件结束。 在解析过程中,我们需要按照记录的格式和顺序读取Hex文件,并根据记录类型对数据进行处理。例如,对于数据记录,我们可以根据起始地址和数据长度将数据写入相应的内存空间或文件中。 解析VC Hex文件的目的是为了能够获取其中的源代码、版本信息或其他相关数据,以便进行版本对比、回滚或其他操作。通过解析Hex文件,我们可以还原出之前的代码状态或版本,并根据需要进行相应的操作。 总而言之,VC Hex文件格式解析是一项对VC系统中的Hex文件进行结构分析和数据提取的过程,通过解析文件,我们可以获取其中的源代码和版本信息,并进行相应的版本管理和控制。 ### 回答2: VC Hex文件格式是一种常见的存储二进制数据的文件格式。它通常被用于将机器语言代码、固件、软件等以十六进制的形式存储在计算机中。 VC Hex文件格式解析的过程主要包括以下几个方面: 1. 文件结构:VC Hex文件由多行文本组成,每行包含一条记录。每条记录通常由一个冒号开始,后面跟着一系列十六进制数值,用于表示数据。记录的具体格式按照规定的标准进行编码。 2. 记录类型:VC Hex文件的记录有多种类型,包括数据记录、扩展段地址记录、起始段地址记录、起始线性地址记录等。根据记录类型的不同,记录中的数据和含义也会有所差异。 3. 数据内容:VC Hex文件中的数据记录包含机器语言指令、数据、校验和等。数据记录的具体内容由记录类型和记录长度决定,它们被以十六进制的形式表示。 4. 校验和:每条记录都包含一个校验和字段,用于验证记录的完整性和准确性。校验和一般为记录中所有数据的和的补码。 解析VC Hex文件时,可以通过逐行读取文件内容,并根据每行的格式和记录类型,提取出需要的数据和信息。根据记录类型的不同,可以按照规定的格式解析出相应的数据,如地址、校验和等。对于数据记录,可以将每个记录中的数据转换为二进制形式,并根据需要进行后续处理或使用。 总之,解析VC Hex文件格式需要了解文件结构、记录类型、数据内容和校验和等方面的知识。通过逐行解析文件内容,可以获得其中存储的数据和相关信息,进而进行后续处理和使用。 ### 回答3: VC Hex文件格式是一种用来描述微控制器程序存储的十六进制文件格式。它将程序的机器码以十六进制形式进行编码,并且以特定的格式进行排列和存储。 在VC Hex文件中,每一行都包含了一定数量的数据。这些数据通常表示机器指令、数据或其他相关信息。每一行的开头通常包含了该行的地址信息,用于标记数据所在的内存地址。而紧接着的数据则是该地址处的值。 VC Hex文件的地址通常是以16位或32位的形式表示的,这取决于所使用的微控制器架构。地址信息的具体格式也可能会有所不同,但通常都会包含一个地址字节数和一个地址校验和。 除了地址和数据之外,VC Hex文件还可能包含一些其他的特定指令,例如起始地址指令和结束地址指令。这些指令用于标记程序执行的起始地址和结束地址,以便于加载和执行程序。 解析一个VC Hex文件的过程通常涉及以下几个步骤: 1. 读取文件并逐行解析每个数据记录。 2. 提取地址信息和数据值,并进行必要的校验。 3. 根据地址信息将数据值存储到对应的内存地址中。 4. 根据特定指令解析起始地址和结束地址,以确定程序的入口点和结束点。 总的来说,VC Hex文件格式解析是将这些十六进制数据按照特定规则进行解析和存储的过程,以便于加载和执行微控制器的程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值