本人很久以前寫過一篇文章 《ARM Cortex-M鏡像文件(.bin/.hex/.s19)》,詳細介紹了三種流行的鏡像文件格式,這些鏡像文件不同于可執行文件(.elf),它們主要保存的是芯片能夠執行的二進制機器碼數據,以及輔助的地址信息和校驗和,其他像 .elf 文件里有的工程信息、代碼信息、調試信息全部被去除了,說白了鏡像文件主要是為最終量產過程而生的。
一般情況下,在 IDE 開發環境里編譯鏈接生成的是可執行文件,然后可以在工程選項做一些設置能進一步生成鏡像文件。不同 IDE 下生成鏡像文件的方法不同,今天主要介紹來MCUXpresso IDE下生成鏡像文件的方法以及與 IAR/MDK 的對比。
注:本文測試的MCUXpresso IDE版本是v11.6.0_8187。
一、各種IDE下生成鏡像文件的方法
我們先來看看MCUXpress以外的其它IDE下是如何生成各種格式鏡像文件的。我們以 SDK_2.11.1_MIMXRT1170-EVKboardsevkmimxrt1170demo_appshello_worldcm7 目錄下的工程文件為例。
1.1 IAR EWARM下
編譯hello_world_demo_cm7.eww工程(隨便選擇 debug build),會在工程目錄 debug文件夾下生成可執行文件hello_world_demo_cm7.out。如果在工程選項Output Converter里開啟Generate additional output,則可以指定生成想要的鏡像文件(bin/hex/srec)。
如果你仔細看Build窗口的log信息,會發現IDE其實是在可執行文件生成之后,再借助 IAR SystemsEmbedded Workbench 9.10.2armbinielftool.exe 小工具對可執行文件做的二次轉換生成的鏡像文件。
ielftool.exe --bin app.out app.binielftool.exe --ihex app.out app.hexielftool.exe --srec app.out app.s19
所以其實在工程選項Build Actions里的Post-build command line添加如下調用 ielftool.exe做轉換的命令(CMD /C 的意思是以 bat 文件內容方式打開后面的命令;命令需要用雙引號括起來;路徑也需要單獨用雙引號括起來,防止路徑中存在空格,導致命令出錯),也能達到一樣的效果。
CMD /C ""$TOOLKIT_DIR$binielftool.exe" --bin "$PROJ_DIR$/debug/hello_world_demo_cm7.out" "$PROJ_DIR$/debug/hello_world_demo_cm7.bin""
1.2 Keil MDK下
編譯hello_world_demo_cm7.uvprojx工程(也選擇debug build),會在工程目錄debug文件夾下生成可執行文件hello_world_demo_cm7.out。如果在工程選項Output里開啟Create HEXfile,則可以生成hex格式鏡像文件,不過要想生成其他bin/srec格式鏡像文件需要想其他辦法。
MDK下其實也有類似IAR下的鏡像文件轉換小工具,即 Keil_v5ARMARMCCbinfromelf.exe,這個小工具可以幫助生成其他格式的鏡像文件。
fromelf.exe --bin app.out --output app.binfromelf.exe --i32 app.out --output app.hexfromelf.exe --m32 app.out --output app.srec
在工程選項User里的After build添加如下調用formelf.exe做轉換的命令就可以得到指定格式的鏡像文件了。
$KARMARMCCbinfromelf.exe --bin --output=debug@L.bin !L
二、MCUXpresso下生成鏡像文件的方法
MCUXpresso IDE 下生成鏡像文件的方法與IAR/MDK稍有不同,其并不是在工程選項里去開啟,而是工程目錄里會有Binaies虛擬文件夾(如果看不到該文件夾,可以按 F5 刷新一下),編譯完成后在Binaies文件夾下會看到可執行文件(evkmimxrt1170_hello_world_demo_cm7.axf),右擊可執行文件在Binary Utilities里可以看到不同格式鏡像文件生成選項。
我們知道MCUXpresso IDE是基于標準ARMGCC的二次封裝,所以其生成鏡像文件的能力其實是依靠MCUXpressoIDE_11.6.0_8187idetoolsbinarm-none-eabi-objcopy.exe 小工具。
arm-none-eabi-objcopy.exe -O binary app.axf app.bin
arm-none-eabi-objcopy.exe -O ihex app.axf app.hex
arm-none-eabi-objcopy.exe -O srec app.axf app.srec
因此在MCUXpresso IDE下我們也可以像IAR/MDK那樣添加Post-build steps命令來完成鏡像文件的生成。
arm-none-eabi-objcopy -O binary "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin"
來源:恩智浦MCU加油站
免責聲明:本文為轉載文章,轉載此文目的在于傳遞更多信息,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請聯系小編進行處理
審核編輯 黃宇
-
IAR
+關注
關注
5文章
352瀏覽量
36679 -
IDE
+關注
關注
0文章
338瀏覽量
46754
發布評論請先 登錄
相關推薦
評論