大家好,我是痞子衡,是正經搞技術的痞子,今天痞子衡給大家分享的是開啟CRC完整性校驗的IAR工程生成.out和.bin檔案先后順序問題,
痞子衡之前寫了一篇 《在IAR開發環境下為工程開啟CRC完整性校驗功能的方法》,有同事在使用CRC校驗功能時遇到了關于.out/.bin檔案先后生成順序的問題,我們在線除錯IAR工程時,除錯器下載的其實是可執行檔案(.out),CRC校驗功能在.out檔案里沒有任何歧義,但是更多時候我們會使用鏡像檔案(.bin)來下載量產,有時候CRC校驗功能在.bin檔案里卻沒有正常開啟,這是怎么回事?痞子衡為你解惑:
一、使用IAR生成鏡像檔案
拋開CRC完整性校驗功能,以一個正常嵌入式工程來說,比如 \SDK_2.8.2_FRDM-K64F\boards\frdmk64f\demo_apps\hello_world\iar\,這個工程正常編譯鏈接后一定會生成.out可執行檔案(其實就是標準.elf檔案),如果我們希望同時能生成一個.bin鏡像檔案,需要借助工程選項Output Converter:

在Output Converter可以指定生成鏡像檔案格式,常見的鏡像格式(.bin/hex/.s19)都支持,如果你了解IAR你應該知道這個功能其實是呼叫 \IAR Systems\Embedded Workbench 8.50.6\arm\bin\ielftool.exe 工具實作的:
ielftool --bin sourceFile.out destinationFile.bin
ielftool --ihex sourceFile.out destinationFile.hex
ielftool --srec sourceFile.out destinationFile.s19
我們編譯工程看一下編譯資訊,從日志輸出順序來看,首先生成了hello_world.out(藍色框標出),然后呼叫了ielftool工具執行轉換命令(綠色框標出),最后生成了hello_world.bin(紅色框標出):

二、比較兩種CRC校驗開啟方法
《在IAR開發環境下為工程開啟CRC完整性校驗功能的方法》 一文中介紹了兩種開啟CRC完整性校驗功能的方法,我們從生成.out/.bin檔案順序的角度來分析一次結果:
2.1 基于Checksum功能
分析開啟Checksum功能的工程編譯結果,可以發現日志輸出順序如下:
1. 呼叫ielftool實作添加CRC校驗功能(藍色框)
2. 生成了包含正確CRC校驗值的.out檔案(綠色框)
3. 呼叫ielftool實作檔案格式轉換(紅色框)
4. 生成了包含正確CRC校驗值的.bin檔案(黃色框)

這種情況下,.out檔案和.bin檔案雖然生成先后順序不同,但都包含了正確的CRC校驗值,因此在CRC驗證使用上是一致的,
2.2 基于Post-build功能
再來分析開啟Post-build功能的工程編譯結果,可以發現日志輸出順序如下:
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里執行順序沒法改變,
我們需要額外寫一個如下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來執行這個腳本,傳入腳本的引數是$TARGET_BPATH$,即不含工程目標檔案后綴的全路徑,再次編譯工程后就可以得到包含正確CRC校驗值的.bin檔案了,問題解決,大功告成!

備注:post-build.bat腳本正常執行的前提是,ielftool工具的路徑需要在系統環境變數里,
至此,開啟CRC完整性校驗的IAR工程生成.out和.bin檔案先后順序問題痞子衡便介紹完畢了,掌聲在哪里~~~
歡迎訂閱
文章會同時發布到我的 博客園主頁、CSDN主頁、知乎主頁、微信公眾號 平臺上,
微信搜索"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦,

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/228296.html
標籤:嵌入式
