hex文件说明
在項目學習的時候,燒錄生成的工程文件.hex給stm32單片機,需要分析hex文件的內容,并對其中某些數據進行修改。通過學習,了解了hex的格式內容。并記錄之
在工程項目中是把程序下載到flash 的 0x0800 0000開頭的位置
?
這里是生成的.hex文件中的數據。
?例如 第一行數據:020000040800F2,其實質表達的是十六進制的數據0x02 0x00 0x00 0x04 0x08 0x00 0xf2
第一個字節 0x02表示本行數據的長度;
第二、三字節 0x00 0x00表示本行數據的起始地址;
第四字節 0x04表示數據類型,數據類型有:0x00、0x01、0x02、0x03、0x04、0x05。
????????'00' Data Rrecord:用來記錄數據,HEX文件的大部分記錄都是數據記錄
????????'01' End of File Record: 用來標識文件結束,放在文件的最后,標識HEX文件的結尾
????????'02' Extended Segment Address Record: 用來標識擴展段地址的記錄
????????'03' Start Segment Address Record:開始段地址記錄
????????'04' Extended Linear Address Record: 用來標識擴展線性地址的記錄
????????'05' Start Linear Address Record:開始線性地址記錄
然后是數據,0x08 0x00
最后一個字節 0xf2為校驗和。
校驗和的算法為:計算 0xf2前所有16進制碼的累加和(不計進位),檢驗和 = 0x100 - 累加和
?'04' ?'05',都是用來提供地址信息的。每次碰到這2個記錄的時候,都可以根據記錄計算出一個“基”地址。對于后面的數據記錄,計算地址的時候,都是以這些“基”地址為基礎的。
HEX文件都是由記錄(RECORD)組成的。在HEX文件里面,每一行代表一個記錄。記錄的基本格式為:
:020000040800F2
:1000000048B6002085010008B1450008252B0108ED
:10001000B9450008C1450008C945000800000000B6
:00000001FF ? ? ?
對上面的HEX文件進行分析:
第1條記錄的長度為02,LOAD OFFSET為0000,RECTYPE為04,說明該記錄為擴展段地址記錄。數據為0800,校驗和為F2。從這個記錄的長度和數據,我們可以計算出一個基地址,這個地址為(0x0800 << 16) = 0x0800 0000后面的數據記錄都以這個地址為基地址。
第2條記錄的長度為10(16),LOAD OFFSET為0000,RECTYPE為00,說明該記錄為數據記錄。數據為48 B6 00 20 85 01 00 08 B1 45 00 08 25 2B 01 08,共16個BYTE。這個記錄的校驗和為ED。此時的基地址為0X0800 0000,加上OFFSET,這個記錄里的16BYTE的數據的起始地址就是0x0800 0000 + 0x0000 = 0x0800 0000.
第3條記錄的長度為10(16),LOAD OFFSET為0010,RECTYPE為00,說明該記錄為數據記錄。數據為B9 45 00 08 C1 45 00 08 C9 45 00 08 00 00 00 00,共16個BYTE。這個記錄的校驗和為B6。此時的基地址為0X0800 0000,加上OFFSET,這個記錄里的16BYTE的數據的起始地址就是0x80000 + 0x0010 = 0x0800 0010.
第4條記錄的長度為00,LOAD OFFSET為0000,TYPE = 01,校驗和為FF。說明這個是一個END OF FILE RECORD,標識文件的結尾。
————————————————
?
總結
- 上一篇: ColorImpact v2.8.1.3
- 下一篇: p2p终结者在交换机上的机器用P2P终结