大家好,,我是痞子衡,,是正經搞技術的痞子,。今天痞子衡給大家分享的是開啟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-K64F\boards\frdmk64f\demo_apps\hello_world\iar\,,這個工程正常編譯鏈接后一定會生成.out可執(zhí)行文件(其實就是標準.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工具執(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í)行這個腳本,,傳入腳本的參數是$TARGET_BPATH$,即不含工程目標文件后綴的全路徑,,再次編譯工程后就可以得到包含正確CRC校驗值的.bin文件了,,問題解決,大功告成!
至此,,開啟CRC完整性校驗的IAR工程生成.out和.bin文件先后順序問題痞子衡便介紹完畢了,,掌聲在哪里~~~ |
|