开头数据:
:020000041004E6
:1000000000800020119B0510AD8D0510A98F0410F4
每行从“:”(0x3a)开始,这从文件内容可以看出。以回车键结束(0x0d,0x0a),每行以换行结束。回车换行的十六进制不会显示。
现在开始解析:第一句
后面的数据位数 数据起始地址 数据类型或叫功能码 数据 校验位 0x02 0x00 0x00 0x04 0x10 0x04 0xE6
数据类型共有:
'00'Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录
'01'文件结束记录:用来标识文件结束,放在文件的最后,标识HEX文件的结尾
'02'扩展段地址记录:用来标识扩展段地址的记录
'03'开始段地址记录:开始段地址记录
'04'扩展线性地址记录:用来标识扩展线性地址的记录
'05'开始线性地址记录:开始线性地址记录
在文件中主要是0x00。
现在的0x04,即该行记录的是一个拓展地址(0x10 0x04 是地址信息,用法是将该地址(0x1004<<16) 后作为基地址。并且表示在下一个04类型行出现之前都要使用该地址.也就是下一句的地址0x00 0x00,起始地址就是从0x10040000开始。
第二句:后面数据16位,起止地址为0x10040000,类型记录数据
0x10 0x00 00800020119B0510AD8D0510A98F0410(十六进制) 0xF4
结尾数据:
:04000005100400C122
:00000001FF
0x05 100400C1 0x22 数据类型0x05,开始线性地址记录,就是函数入口地址
在map文件可以看到 __main 0x100400c1 Thumb Code 8 __main.o(!!!main)
数据对应着地址。
0x01 FF
最后一个教校验计算:0xF4 = 0xff & ( 0x100- (0x10+4*(0x00)+0x80+0x00+...+0x04+0x10) )