编译器生成代码的Hex浅析

新闻资讯   2023-06-15 12:02   93   0  
一般来说,程序编辑好之后,如果没有编译错误,那么由编译器编译后生成Hex文件,这个文件就可以被送到编程器中,从而对器件进行烧录编程。
示例Hex文件
从上图来看,Hex就是一个16进制数文件,它具有一定格式,下面我们进行一些说明。
▲Hex典型格式
Hex文件的格式,如上图所示,共包含6个部分,开始冒号为起始记录,bb为字节个数,aaaa为地址,dd为具体的数据,ccchecksum部分。
典型的Hex示例解读
从上述示例可知,02代表这部分Hex有两个字节,0400是这部分Hex的存储地址,而00为其记录类型(后续我们会介绍一下记录类型有哪些种类),0034为数据部分,这里先存放低字节部分,后存放高字节部分。
记录类型的说明
记录类型使用两位二进制数据表示,共有四种形式,如上图表示,其中00表示数据类型,01表示文件结尾记录类型(后续我们对实际Hex进行说明)。
▲Hex文件结尾表示
这里是结尾Hex数据表示,00代表有0个数据,地址表示0x0000,记录类型为0x01checksum0xFF。
实际Hex的文件
这里我们使用一个实际的PIC16F1778的代表编译出来的Hex进行说明,第一行Hex数据是02 0000 04 0000 FA,可以看出这里有两个Hex字节,地址为0x0000,记录类型为扩展线性地址记录,数据是0000checksum0xFA,对应第一个PAGE存储空间。
第二行为04 0000 00 8031 0628 1D,这里显示为四个数据字节,地址为0x0000开始,类型为数据字节,具体数据为0x31800x2806,从program memory视图可以验证这个解读。
▲Hex解读1
第三行10 0008 00 8331 042B …0030 22,这里我们可知此处16个字节,从字节地址0x0008,换算成字地址后为0x0004开始,那么数据类型为00数据类型,后续就是具体的数据了,0x31830x2B04……等。
▲Hex解读2
▲Hex文件结尾处解读
最后一行00 0000 01 FF。这里可以看出它包含0个字节,地址为0x0000,记录类型为文件结尾0x01checksum0xFF。
倒数第二行04 000E 00 E43F FF3F 8D,这里表示四个字节,从0x000E字节地址开始,数据类型为00数据类型,具体数据为0x3FE4,0x3FFF,checksum8D,如下图所示,这里对应的字起始地址为0x8007,具体数据为0x3FE4,0x3FFF,为芯片配置位部分。
▲Hex代码末尾解读
配置位部分解读
倒数第四行为02 06B8 00 0800 38,此行代表Hex末端最后两个字节,对应字地址为0x35C,具体数据为0x0008,由上图可知。
倒数第三行为02 0000 04 0001 F9,这里同样也是一个扩展线性地址记录类型,对应第二个PAGE空间。
▲PIC16F1778/PIC16F1779memory视图
从上述存储视图中,可以看到这个芯片存储空间由8PAGE组成,每一个PAGE占用2048个字地址,对应4096个字节地址,也就是4kB,总共就是28kB空间。
相同系列芯片FLASH空间说明
以上对这个系列芯片的Hex文件格式进行了说明,作为进一步分析的基础。

END

来源:电源漫谈

版权归原作者所有,如有侵权,请联系删除。

推荐阅读
华为C/C++编码规范流出
分享一个开源串口神器,太强了!
短短三个月,稚晖君创业项目已获三轮融资

→点关注,不迷路←

文章引用微信公众号"嵌入式微处理器",如有侵权,请联系管理员删除!

博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。