一般来说,程序编辑好之后,如果没有编译错误,那么由编译器编译后生成Hex文件,这个文件就可以被送到编程器中,从而对器件进行烧录编程。
从上图来看,Hex就是一个16进制数文件,它具有一定格式,下面我们进行一些说明。Hex文件的格式,如上图所示,共包含6个部分,开始冒号为起始记录,bb为字节个数,aaaa为地址,dd为具体的数据,cc为checksum部分。从上述示例可知,02代表这部分Hex有两个字节,0400是这部分Hex的存储地址,而00为其记录类型(后续我们会介绍一下记录类型有哪些种类),0034为数据部分,这里先存放低字节部分,后存放高字节部分。记录类型使用两位二进制数据表示,共有四种形式,如上图表示,其中00表示数据类型,01表示文件结尾记录类型(后续我们对实际Hex进行说明)。这里是结尾Hex数据表示,00代表有0个数据,地址表示0x0000,记录类型为0x01,checksum是0xFF。这里我们使用一个实际的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视图可以验证这个解读。第三行10 0008 00 8331 042B …0030 22,这里我们可知此处16个字节,从字节地址0x0008,换算成字地址后为0x0004开始,那么数据类型为00数据类型,后续就是具体的数据了,0x3183,0x2B04……等。最后一行00 0000 01 FF。这里可以看出它包含0个字节,地址为0x0000,记录类型为文件结尾0x01,checksum为0xFF。倒数第二行04 000E 00 E43F FF3F 8D,这里表示四个字节,从0x000E字节地址开始,数据类型为00数据类型,具体数据为0x3FE4,0x3FFF,checksum为8D,如下图所示,这里对应的字起始地址为0x8007,具体数据为0x3FE4,0x3FFF,为芯片配置位部分。倒数第四行为02 06B8 00 0800 38,此行代表Hex末端最后两个字节,对应字地址为0x35C,具体数据为0x0008,由上图可知。倒数第三行为02 0000 04 0001 F9,这里同样也是一个扩展线性地址记录类型,对应第二个PAGE空间。▲PIC16F1778/PIC16F1779的memory视图从上述存储视图中,可以看到这个芯片存储空间由8个PAGE组成,每一个PAGE占用2048个字地址,对应4096个字节地址,也就是4kB,总共就是28kB空间。以上对这个系列芯片的Hex文件格式进行了说明,作为进一步分析的基础。来源:电源漫谈
版权归原作者所有,如有侵权,请联系删除。
▍推荐阅读
培养一个优秀的嵌入式工程师有多难?
何同学抄袭风波原作者已接受道歉:不想毁掉他
C/C++大限将至,美国强硬要求2026年前全面剔除!