专栏名称: 嵌入式微处理器
关注这个时代最火的嵌入式微处理器,你想知道的都在这里。
目录
51好读  ›  专栏  ›  嵌入式微处理器

编译器生成代码的Hex浅析

嵌入式微处理器  · 公众号  ·  · 2024-12-11 12:00

正文

一般来说,程序编辑好之后,如果没有编译错误,那么由编译器编译后生成 Hex 文件,这个文件就可以被送到编程器中,从而对器件进行烧录编程。
示例 Hex 文件

从上图 来看, Hex 就是一个 16 进制数文件,它具有一定格式,下面我们进行一些说明。

▲Hex 典型格式

Hex 文件的格式,如上图所示,共包含 6 个部分,开始冒号为起始记录, bb 为字节个数, aaaa 为地址, dd 为具体的数据, cc checksum 部分。

典型的 Hex 示例解读
从上述示例可知, 02 代表这部分 Hex 有两个字节, 0400 是这部分 Hex 的存储地址,而 00 为其记录类型(后续我们会介绍一下记录类型有哪些种类), 0034 为数据部分,这里先存放低字节部分,后存放高字节部分。

记录类型的说明

记录类型使用两位二进制数据表示,共有四种形式,如上图表示,其中 00 表示数据类型, 01 表示文件结尾记录类型(后续我们对实际 Hex 进行说明)。

▲Hex 文件结尾表示

这里是结尾 Hex 数据表示, 00 代表有 0 个数据,地址表示 0x0000 ,记录类型为 0x01 checksum 0xFF。

实际 Hex 的文件

这里我们使用一个实际的 PIC16F1778 的代表编译出来的 Hex 进行说明,第一行 Hex 数据是 02 0000 04 0000 FA, 可以看出这里有两个 Hex 字节,地址为 0x0000 ,记录类型为扩展线性地址记录,数据是 0000 checksum 0xFA ,对应第一个 PAGE 存储空间。

第二行为 04 0000 00 8031 0628 1D, 这里显示为四个数据字节,地址为 0x0000 开始,类型为数据字节,具体数据为 0x3180 0x2806 ,从 program memory 视图可以验证这个解读。

▲Hex 解读 1

第三行 10 0008 00 8331 042B …0030 22, 这里我们可知此处 16 个字节,从字节地址 0x0008 ,换算成字地址后为 0x0004 开始,那么数据类型为 00 数据类型,后续就是具体的数据了, 0x3183 0x2B04…… 等。

▲Hex 解读 2

▲Hex 文件结尾处解读

最后一行 00 0000 01 FF。 这里可以看出它包含 0 个字节,地址为 0x0000 ,记录类型为文件结尾 0x01 checksum 0xFF。

倒数第二行 04 000E 00 E43F FF3F 8D, 这里表示四个字节,从 0x000E 字节地址开始,数据类型为 00 数据类型,具体数据为 0x3FE4,0x3FFF,checksum 8D ,如下图 所示,这里对应的字起始地址为 0x8007, 具体数据为 0x3FE4,0x3FFF, 为芯片配置位部分。

▲Hex 代码末尾解读

配置位部分解读

倒数第四行为 02 06B8 00 0800 38 ,此行代表 Hex 末端最后两个字节,对应字地址为 0x35C, 具体数据为 0x0008, 由上图可知。

倒数第三行为 02 0000 04 0001 F9 ,这里同样也是一个扩展线性地址记录类型,对应第二个 PAGE 空间。

▲PIC16F1778/PIC16F1779 memory 视图

从上述存储视图中,可以看到这个芯片存储空间由 8 PAGE 组成,每一个 PAGE 占用 2048 个字地址,对应 4096 个字节地址,也就是 4kB, 总共就是 28kB 空间。

相同系列芯片 FLASH 空间说明

以上对这个系列芯片的 Hex 文件格式进行了说明,作为进一步分析的基础。

END

来源: 电源漫谈







请到「今天看啥」查看全文