大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是開啟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主頁、知乎主頁、微信公眾號 平台上。
微信搜索"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。