痞子衡嵌入式:探析開啓CRC完整性校驗的IAR工程生成.out和.bin文件前後順序


  你們好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給你們分享的是開啓CRC完整性校驗的IAR工程生成.out和.bin文件前後順序問題html

  痞子衡以前寫了一篇 《在IAR開發環境下爲工程開啓CRC完整性校驗功能的方法》,有同事在使用CRC校驗功能時遇到了關於.out/.bin文件前後生成順序的問題。咱們在線調試IAR工程時,調試器下載的實際上是可執行文件(.out),CRC校驗功能在.out文件裏沒有任何歧義,可是更多時候咱們會使用鏡像文件(.bin)來下載量產,有時候CRC校驗功能在.bin文件裏卻沒有正常開啓,這是怎麼回事?痞子衡爲你解惑:微信

1、使用IAR生成鏡像文件

  拋開CRC完整性校驗功能,以一個正常嵌入式工程來講,好比 \SDK_2.8.2_FRDM-K64F\boards\frdmk64f\demo_apps\hello_world\iar\,這個工程正常編譯連接後必定會生成.out可執行文件(其實就是標準.elf文件)。若是咱們但願同時能生成一個.bin鏡像文件,須要藉助工程選項Output Converter:app

  在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(紅色框標出):post

2、比較兩種CRC校驗開啓方法

  《在IAR開發環境下爲工程開啓CRC完整性校驗功能的方法》 一文中介紹了兩種開啓CRC完整性校驗功能的方法,咱們從生成.out/.bin文件順序的角度來分析一次結果:ui

2.1 基於Checksum功能

  分析開啓Checksum功能的工程編譯結果,能夠發現日誌輸出順序以下:.net

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驗證,這也是我同事遇到的問題。code

3、解決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主頁知乎主頁微信公衆號 平臺上。

微信搜索"痞子衡嵌入式"或者掃描下面二維碼,就能夠在手機上第一時間看了哦。

相關文章
相關標籤/搜索