你了解单片机程序的hex文件吗?它包含哪些信息
https://m.toutiao.com/is/etkYYex/
图1
图2
(1)每行都是以冒号开始,这只是一个规范格式。
(2)第1行:02表示这一行有两个字节的数据,0800是真正的数据,0000表示本行数据的起始地址,04相当于一个功能码,表示设定偏移地址,就是0x0800左移16位变成0x08000000,表示存储代码的起始地址,F2是校验位,校验位=0x100-(这一行校验位之前所有数之和),就是一个公式,所有行的校验方式是一样的。
(3)第2行:10表示这一行有16个字节的数据,0000表示存储的其实地址,实际上是0x08000000,后面的00也是一个功能码,表示这一行是存数据的,就是程序代码的一部分,紧跟着16个字节的数据,然后是校验位。
(4)倒数第3行,跟第2行其实是一样的,只不过数据到了最后,没有16字节了,只有12个字节。
(5)倒数第2行,04表示有4个字节的数据,0000表示本行数据的起始地址,05是一个功能码,表示程序开始运行的地址,就是main函数的入口,本例中入口地址在:0x080000ED,最后是校验位。
(6)倒数第1行,00表示这一行无实际数据,0000表示本行数据的起始地址,01是一个功能码,表示hex文件结束,即最后一行,FF是校验位。
总结hex文件每一行的结构就是:【数据字节数】【本行起始地址】【功能码】【数据】【校验位】,其实也并不复杂。本文是按照一个实际的hex文件来分析的,不同程序编译出来的hex文件会略有不同,功能码还有02和03两种,这里没有涉及,不做描述。从以上分析可以看出,hex文件中不仅仅包含程序代码的数据,还包含其他的一些标示信息,因此,hex文件的大小不等同于程序代码的实际大小。
Hex文件的神秘面纱是不是已经被我们揭开了?
单片机、ARM、现场总线、PLC、嵌入式软硬件的设计经验分享,秉承“点点滴滴皆智慧”的理念,以实际项目为单元阐述知识点,一起分享,共同交流。