日常开发工作中hex文件是经常用到的一种文件格式,例如生产部门进行量产程序烧录,那么往往使用的是HEX文件。
下面以stm32生成的hex为例,分析hex的文件格式:
官方定义:
<0x3a>[数据长度1Byte][数据地址2Byte][数据类型1Byte][数据nByte][校验1Byte]<0x0d><0x0a>
打开一个stm32生成的hex文件:
1)结合格式分析第一行(指定基地址)
:020000040800F2(:02 0000 04 0800 F2)
解析:
“:” --对应格式中的<0x3a>,0x3a就是冒号的ASCII码
“02”–对应数据长度,即长度为2字节
“0000”–对应数据地址,长度为2个字节。Stm32一个32位的芯片两个字节肯定不足以表示地址(要四个),所以这里地址的具体用法要结合后面的数据类型分析。这里为4指定基地址,所以这两个字节并没有什么用。
“04”–对应数据类型,具体的含义见【注释1】,这里的4是指定基地址。
“0800”–对应数据,长度是浮动的,这里是2个字节,和前面的长度相呼应。这里指定的是基地址。当然指定的是高16的地址,如常见的0x0800 0000 ,所以这个基地址<<16使用。
“F2”–对应的是校验结果,result = 256 - (date[0] + … +date[n])% 256 ,0xF2 = 0x100 - (0x02 +0x00 + 0x00 + 0x04 + 0x08 +