• 正文
  • 相關推薦
申請入駐 產業(yè)圖譜

一個你不曾注意過的.out.bin生成先后順序問題

2020/11/30
206
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是開啟 CRC 完整性校驗的 IAR 工程生成 .out 和 .bin 文件先后順序問題。

痞子衡之前寫了一篇 《在 IAR 開發(fā)環(huán)境下為工程開啟 CRC 完整性校驗功能的方法》,有同事在使用 CRC 校驗功能時遇到了關于 .out/.bin 文件先后生成順序的問題。我們在線調試 IAR 工程時,調試器下載的其實是可執(zhí)行文件(.out),CRC 校驗功能在 .out 文件里沒有任何歧義,但是更多時候我們會使用鏡像文件(.bin)來下載量產,有時候 CRC 校驗功能在 .bin 文件里卻沒有正常開啟,這是怎么回事?痞子衡為你解惑:

一、使用 IAR 生成鏡像文件

拋開 CRC 完整性校驗功能,以一個正常嵌入式工程來說,比如 SDK_2.8.2_FRDM-K64Fboardsfrdmk64fdemo_appshello_worldiar,這個工程正常編譯鏈接后一定會生成 .out 可執(zhí)行文件(其實就是標準 .elf 文件)。如果我們希望同時能生成一個 .bin 鏡像文件,需要借助工程選項 Output Converter:

?

在 Output Converter 可以指定生成鏡像文件格式,常見的鏡像格式(.bin/hex/.s19)都支持。如果你了解 IAR 你應該知道這個功能其實是調用 IAR SystemsEmbedded Workbench 8.50.6armbinielftool.exe 工具實現的:

ielftool --bin sourceFile.out destinationFile.bin
ielftool --ihex sourceFile.out destinationFile.hex
ielftool --srec sourceFile.out destinationFile.s19

我們編譯工程看一下編譯信息,從日志輸出順序來看,首先生成了 hello_world.out(藍色框標出),然后調用了 ielftool 工具執(zhí)行轉換命令(綠色框標出),最后生成了 hello_world.bin(紅色框標出):

?

二、比較兩種 CRC 校驗開啟方法

《在 IAR 開發(fā)環(huán)境下為工程開啟 CRC 完整性校驗功能的方法》 一文中介紹了兩種開啟 CRC 完整性校驗功能的方法,我們從生成 .out/.bin 文件順序的角度來分析一次結果:

2.1 基于 Checksum 功能

分析開啟 Checksum 功能的工程編譯結果,可以發(fā)現日志輸出順序如下:

1. 調用 ielftool 實現添加 CRC 校驗功能(藍色框)
2. 生成了包含正確 CRC 校驗值的 .out 文件(綠色框)
3. 調用 ielftool 實現文件格式轉換(紅色框)
4. 生成了包含正確 CRC 校驗值的 .bin 文件(黃色框)

這種情況下,.out 文件和 .bin 文件雖然生成先后順序不同,但都包含了正確的 CRC 校驗值,因此在 CRC 驗證使用上是一致的。

2.2 基于 Post-build 功能

再來分析開啟 Post-build 功能的工程編譯結果,可以發(fā)現日志輸出順序如下:

1. 生成了默認 CRC 校驗值的 .out 文件(藍色框)
2. 調用 ielftool 實現文件格式轉換(綠色框)
3. 生成了包含默認 CRC 校驗值的 .bin 文件(紅色框)
4. 調用 ielftool 實現添加 CRC 校驗功能(黃色框)
5. 生成了包含正確 CRC 校驗值的 .out 文件(紫色框)

這種情況下,.out 文件和 .bin 文件生成先后順序不同,但是 .bin 里只是默認的 CRC 校驗值(全 0),并不是期望的正確 CRC 校驗值,因此無法用于后面的 CRC 驗證,這也是我同事遇到的問題。

三、解決 Post-build 下 .bin/.out 一致性問題

現在讓我們來解決我同事遇到的 Post-build 下 .bin 和 .out 里 CRC 校驗值不一致問題,顯然無法直接使用工程選項 Output Converter 功能了,因為它在 IAR 里執(zhí)行順序沒法改變。

我們需要額外寫一個如下 post-build.bat 腳本,在 bat 腳本里實現 CRC 校驗功能添加以及文件格式轉換,這樣我們就能控制文件生成順序。

set?OUT=%1.out
set?BIN=%1.bin

ielftool?--fill="0xFF;__checksum_begin-__checksum_end"?--checksum="__checksum:4,crc32:p,0xffffffff;__checksum_begin-__checksum_end"?--verbose?%OUT%?%OUT%

ielftool?--bin?--verbose?%OUT%?%BIN%

將 post-build.bat 腳本放到工程文件同路徑下,并重新使用 Post-build 來執(zhí)行這個腳本,傳入腳本的參數是,即不含工程目標文件后綴的全路徑,再次編譯工程后就可以得到包含正確 CRC 校驗值的 .bin 文件了,問題解決,大功告成!

?

備注:post-build.bat 腳本正常執(zhí)行的前提是,ielftool 工具的路徑需要在系統環(huán)境變量里。

至此,開啟 CRC 完整性校驗的 IAR 工程生成 .out 和 .bin 文件先后順序問題痞子衡便介紹完畢了,掌聲在哪里~~~

相關推薦

登錄即可解鎖
  • 海量技術文章
  • 設計資源下載
  • 產業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

碩士畢業(yè)于蘇州大學電子信息學院,目前就職于恩智浦(NXP)半導體MCU系統部門,擔任嵌入式系統應用工程師。痞子衡會定期分享嵌入式相關文章