久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2621|回復: 1
打印 上一主題 下一主題
收起左側

Hex文件格式與合并

  [復制鏈接]
跳轉到指定樓層
樓主
ID:262045 發表于 2022-6-10 11:38 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
什么是hex文件
hex文件格式是可以燒寫到單片機中,被單片機執行的一種文件格式,生成Hex文件的方式有很多種,可以通過不同的編譯器將C程序或者匯編程序編譯生成hex。

Hex文件格式:

先來看一下hex文件,主要截取了三部分,開頭1行



中間數據,這里只截取了一部分作為表示



結尾2行



數據少不了數據格式(協議),先來看一看hex文件的數據格式,以第一行數據(020000040002f8)為例,看一看hex文件的每一字段數據是什么意思:

020000040002f8可以分解為:

0x02 0x00 0x00 0x04 0x02 0x02 0xf8,前面4個字節和最后一個字節是有特殊含義的,中間為數據,每個字段的具體含義如下:

第一字節0x02:數據長度,即該行有多少個數據;

第二、三字節0x00、0x00:表示本行數據的起始地址位;

第四個字節有0x00 0x01 0x02 0x03 0x04 0x05,分別有以下含義:

'00’Data Rrecord:用來記錄數據,HEX文件的大部分記錄都是數據記錄

'01’文件結束記錄:用來標識文件結束,放在文件的最后,標識HEX文件的結尾

'02’擴展段地址記錄:用來標識擴展段地址的記錄

'03’開始段地址記錄:開始段地址記錄

'04’擴展線性地址記錄:用來標識擴展線性地址的記錄

'05’開始線性地址記錄:開始線性地址記錄

最后一個字節0xf8為校驗和:校驗和= 0x100 - 累加和

單純看上面的介紹,好像也看不出和MCU的FLASH地址如何聯系起來,接下來看看是如何跟FLASH地址對應的



第一字節表示該行的數據字節數;如第1行只有 0x08 0x00 兩個字節的數據,類型是 04 ,即該行記錄的是一個拓展地址(0x08 0x00 是地址信息,用法是將該地址(0x0800<<16) 后作為基地址。并且表示在下一個04類型行出現之前都要使用該地址。

例如第2行的地址信息是 0x0000,則表示該行數據從0x08000000( (0x0800<<16) | 0x0000 )開始記錄。

第3行則從 0x08000010 ( (0x0800<<16) | 0x0010 )開始記錄。

另外最后一個字節的校驗和 0xD2 = 0xff & ( 0x100- (0x10+4*(0x00)+0x38+0x05+…+0x00+0x08) ) = 0xff & (0x100-0x2E);

然后再看結尾部分: 類型是05,有4字節數據,從上面的介紹可以知道,05是指“開始線性地址記錄”,什么意思呢?

其實就是函數入口地址,從編譯產生的.map文件中,可以看到Image Entry point后面跟的就是這個值

例如第2行的地址信息是 0x0000,則表示該行數據從0x08000000( (0x0800<<16) | 0x0000 )開始記錄。

第3行則從 0x08000010 ( (0x0800<<16) | 0x0010 )開始記錄。

另外最后一個字節的校驗和 0xD2 = 0xff & ( 0x100- (0x10+4*(0x00)+0x38+0x05+…+0x00+0x08) ) = 0xff & (0x100-0x2E);

然后再看結尾部分: 類型是05,有4字節數據,從上面的介紹可以知道,05是指“開始線性地址記錄”,什么意思呢?

其實就是函數入口地址,從編譯產生的.map文件中,可以看到Image Entry point后面跟的就是這個值





最后的一行,01代表文件結束,以上就是關于hex文件的簡單介紹。

合并hex文件的幾種方法
1、傳統而不優雅的直接合并法
打開我們的hex文件,就以BOOT和APP代碼為例,用記事本或者其他的軟件(notepad++等)打開



從上面的介紹我們可以知道,hex文件最后一行是代表文件的結束,那么我們只需要刪除boot文件的最后一行代碼,然后把APP的代碼直接拷貝過來



這樣我們就得到了最終的hex文件,直接燒錄進去MCU即可

2、jflash燒錄
jlink說我們必不可少的燒錄調試工具之一,一起來看看怎么使用jlink自帶的jflash工具合并

打開jflash,首先選擇我們的第一個文件,file->open data file即可



打開之后,可以看到地址是從8000000開始的,也即是我們的MCU flash的基地址



然后再點擊file->merge data file



選擇我們的第二個文件,選擇打開之后,第二個hex文件就拼接到了BOOT文件之后了,保存文件即可,建議另存為我們需要的文件名,否則的話,會默認為我們打開的第一個文件名

3、開源小工具
這個方法和上面jflash的方法類似,網上有很多熱心網友開發的小工具,也可以自己做一個,小飛哥就找一個自己測試過得給大伙用吧

軟件源碼開源,非本人所編寫,github地址為:https://github.com/SmartElec/STM32-IAP-HEX-Merge,源碼為C#所編寫。

下載下來有源碼,感興趣的就看看,不感興趣的就直接用即可,在realese文件夾內



直接選擇我們的hex文件,注意順序



還可以同時生成bin文件,點擊合并即可



文件夾內已經生成了目標hex合并文件



接下來就可以把所有文件合并之后,只燒錄一個hex文件啦
————————————————
版權聲明:本文為CSDN博主「Mr_Wyf」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_16519885/article/details/123744104

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享淘帖 頂4 踩
回復

使用道具 舉報

沙發
ID:476527 發表于 2022-6-13 08:45 | 只看該作者
感謝轉載,雖然已經知道怎么合并兩個hex文件,但對其原理還是有所疑惑,這篇文章很好的解決了我的問題。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: av无遮挡| www天天操 | 在线视频一区二区三区 | 丁香婷婷综合激情五月色 | 亚洲+变态+欧美+另类+精品 | 99re视频在线观看 | 亚洲一区二区三区四区五区中文 | 91免费高清 | 午夜精品久久久久久久99黑人 | 波多野结衣一区二区 | 无码一区二区三区视频 | 可以免费观看的av | 国产精品福利网站 | 国产传媒在线播放 | 91麻豆精品国产91久久久更新资源速度超快 | 91天堂 | 91超碰在线观看 | 国产日产久久高清欧美一区 | 国产精品久久久久久久免费大片 | 午夜三级在线观看 | 97精品超碰一区二区三区 | 国产精品久久久久久久久久 | av中文网| 精品日本久久久久久久久久 | 久久夜色精品国产 | 精品一二三 | 国产精品视频在线播放 | 亚洲精品区 | 成人精品视频在线观看 | 国产精品国产精品国产专区不蜜 | 中文字幕一区二区三区精彩视频 | 在线欧美小视频 | 免费视频久久久久 | av中文字幕在线播放 | 中文字幕一区二区三区四区五区 | 黄色一级特级片 | 精品久久久久久久久久久久久久 | 亚洲国产精品视频 | 天天操天天射天天舔 | 亚洲国产欧美精品 | 91精品国产日韩91久久久久久 |