首页/文章/ 详情

编译器生成代码的Hex浅析

1年前浏览1684

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

图0 示例hex文件  

从图0来看,hex就是一个16进制数文件,它具有一定格式,这里我们进行一些说明。  

图1 hex典型格式  

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

2 典型的hex示例解读

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

3 记录类型的说明  

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

4 hex文件结尾表示  

这里是结尾hex数据表示,00代表有0个数据,地址表示0x0000,记录类型为0x01checksum0xFF.

5 实际hex的文件  

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

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

6 hex解读1  

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

7 hex解读2  

8 hex文件结尾处解读  

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

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

9 hex代码末尾解读  

10 配置位部分解读  

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

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

11 PIC16F1778/PIC16F1779memory视图  

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

12 相同系列芯片FLASH空间说明  

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


来源:电源漫谈
电源电路芯片
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-05-17
最近编辑:1年前
仿真秀32093466624
硕士 签名征集中
获赞 90粉丝 77文章 167课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈