色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          "); //-->

          博客專欄

          EEPW首頁 > 博客 > 功能強(qiáng)大的 HEX 開源轉(zhuǎn)換工具,你值得擁有

          功能強(qiáng)大的 HEX 開源轉(zhuǎn)換工具,你值得擁有

          發(fā)布人:魚鷹談單片機(jī) 時(shí)間:2021-05-12 來源:工程師 發(fā)布文章

          功能

          你是否存在這樣的需求?

          將 HEX 轉(zhuǎn)化為 BIN文件?

          將 BIN 文件轉(zhuǎn)化為 HEX 文件?

          將兩個(gè) HEX 文件合并成一個(gè) HEX 文件?

          將兩個(gè) BIN 文件合并成一個(gè) BIN 文件?

          將一個(gè) HEX 拆分成多個(gè) HEX文件?

          計(jì)算某段空間數(shù)據(jù)的 CRC 校驗(yàn)數(shù)據(jù),用于 ROM 完整性檢查?

          比較兩個(gè) HEX 或 BIN 文件的差異?

          如果你有這些需求,但是你還需要自制工具或使用多個(gè)工具才能完成以上功能,那你就 out 了,是時(shí)候用上這個(gè)開源工具了:SRecord

          該工具可以在 LINUX 和 window 平臺工作,滿足你的開發(fā)需求。

          官方只提供源碼(C++),并沒有exe格式的文件直接供你使用,但有前輩開路,不用擔(dān)心,所以你可以在該鏈接下直接下載該工具,復(fù)制到你的 Windows 電腦上即可用命令行的形式使用了:

          https://sourceforge.net/projects/srecord/files/srecord-win32/

          (右滑查看)

          如果不方便下載,魚鷹在后臺也提供了該軟件包(不需要安裝,解壓縮即可),回復(fù) hex工具 即可領(lǐng)取工具。

          為了方便說明,首先我們使用同一個(gè)工程生成兩個(gè) HEX 文件,一個(gè)默認(rèn)偏移地址 0x08000000(代表 BOOTLOADER)input0.hex,另一個(gè)偏移地址 0x0800A000(代表 APP)intput1.hex。

          1.png

          因?yàn)槌跏嫉刂凡灰粯樱晕覀兛梢允褂盟M(jìn)行合并(如果兩個(gè) HEX文件地址有重合,將產(chǎn)生錯(cuò)誤或警告,合并失敗,當(dāng)然如果確實(shí)有需求,也是有辦法的)。

          然后將兩個(gè)文件拷貝到工具目錄下,這一步可以不做,僅僅是為了方便書寫命令而已,事實(shí)上,一般我們在命令中明確給出路徑即可(相對路徑或絕對路徑)。

          /c/SREC/srec_cat.exe src/input.hex -intel -offset -0x0800A000 -o src/output.bin -binary

          2.png

          將HEX文件轉(zhuǎn)化為 BIN文件(BASH環(huán)境下命令,CMD類似)

          ./srec_cat.exe input1.hex -intel -offset -0x0800A000 -o output1.bin -binary

          需要注意的是魚鷹標(biāo)記的 -,如果沒有這個(gè),程序可以正常執(zhí)行,不報(bào)錯(cuò),但是會生成一個(gè)很大文件(從地址 0 開始轉(zhuǎn)化):

          3.png

          -intel 代表使用 HEX格式來解析 input1.hex 文件,它并不是靠后綴名確定格式的

          -binary 代表輸出 BIN格式文件

          -offset -0x0800A000 代表從 0x0800A000 地址轉(zhuǎn)化,否則將從 0 地址開始轉(zhuǎn)化。

          如果輸入的Intel HEX文件的記錄未按升序地址順序排序,將發(fā)出警告,可使用 Disable_Sequence_Warnings 選項(xiàng)禁用。KEIL 51生成的 HEX 就是這種情況,ARM的并不需要該選項(xiàng)。

          將 BIN文件轉(zhuǎn)化為 HEX文件?

          ./srec_cat.exe output1.bin -binary -offset -0x0800A000 -o cmp.hex -intel

          因?yàn)轸~鷹不確定該命令是否正確,所以又將生成的 cmp.hex 文件轉(zhuǎn)化為 bin文件進(jìn)行對比:

          ./srec_cat.exe cmp.hex -intel -offset 0x0800A000 -o cmp.bin -binary

          事實(shí)上,上述命令確實(shí)可以將 bin文件轉(zhuǎn)化為 hex文件。

          4.png

          將兩個(gè) HEX文件合并成一個(gè) HEX文件

          ./srec_cat.exe input0.hex -intel input1.hex -intel -o output.hex -intel

          此時(shí)兩個(gè)文件文件的中間空白部分填充 0xff。

          如果你想固定中間部分的填充值,可以使用如下命令:

          ./srec_cat.exe input0.hex -intel -fill 0xff 0x08000000 0x0800A000  input1.hex -intel  -o output_ff.hex -intel

          -fill 0xff 0x08000000 0x0800A000 代表如果 0x08000000~0x0800A000 地址有空白,將填充0xff,當(dāng)然也可以修改成 0x00 或其他值,建議該值和 FLASH擦除后的值保持一致。

          5.png

          并且該 參數(shù)應(yīng)該放在 input0.hex -intel 之后,放在 input1.hex -intel 后面會出錯(cuò),應(yīng)該是該參數(shù)值對前面的文件有效,并且地址范圍包含在前面文件中。

          ./srec_cat.exe input0.hex -intel -fill 0xff 0x08000000 0x0800A000  input1.hex -intel -offset -0x08000000 -o output_ff.bin -binary

          魚鷹曾嘗試使用上面的參數(shù)直接生成 bin文件,但發(fā)現(xiàn)最終生成的 bin文件從地址 0 開始,-offset 并沒起作用,只能先轉(zhuǎn)化為 hex文件了。

          將兩個(gè) BIN文件合并成一個(gè) BIN文件

          ./srec_cat.exe -output "merge.bin" -binary output0.bin -binary -fill 0xff 0x00000000 0x0000A000 output1.bin -binary -offset 0x0000A000

          特別注意的是,這條命令和之前的命令有很大不同,首先指定輸出文件,并且有雙引號,而第二個(gè)文件指定(偏移)地址時(shí), -offset 0x0000A000地址前沒有 -。

          并且因?yàn)閎in文件不存在絕對地址信息,只有相對偏移,所以你會看到第一個(gè)輸入文件 output0.bin 并沒有指定偏移,將以默認(rèn)地址 0 處理,并且填充命令也是按照偏移 0x00000000 0x0000A000來處理。

          將一個(gè) HEX拆分成多個(gè) HEX文件

          ./srec_cat.exe output_ff.hex -intel -crop 0x08000000 0x08009FFF -o merge_part1.hex -intel

          分割第一個(gè)文件

          ./srec_cat.exe output_ff.hex -intel -crop 0x0800A000 0x08100000 -o merge_part2.hex -intel

          分割第二個(gè)文件,注意不要加 -offset -0x0800A000,網(wǎng)上一篇參考文章加了該參數(shù),實(shí)際發(fā)現(xiàn)生成的 hex 文件從 0x0 開始。

          0x08100000 這個(gè)值只要包含你的 HEX 文件的最大地址即可。

          關(guān)于加入 CRC校驗(yàn)、比較文件的差異功能,我們下期再見了。

          *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。



          關(guān)鍵詞: 開源轉(zhuǎn)換

          技術(shù)專區(qū)

          關(guān)閉