1、話題引入
在使用Keil集成開發(fā)環(huán)境中大伙使用頻率高的文件大概就是.hex吧,如果考慮內(nèi)存布局等會使用到.map文件,如果遇到了疑難bug還會在仿真過程中看一看匯編窗口欄。
然而bin文件作為嵌入式最為直接的固件,同樣也是我們非常需要獲得的文件,比如進行遠(yuǎn)程升級等等,一方面可以直接通過其他hex轉(zhuǎn)bin工具轉(zhuǎn)化,另一方面通過集成開發(fā)環(huán)境自帶的功能進行轉(zhuǎn)化即可。
同樣有時候我們不想通過debug狀態(tài)下的匯編欄進行匯編查看,而是想直接分析每個源文件編譯所生成的匯編文件來定位問題和優(yōu)化性能,集成開發(fā)環(huán)境能夠有生成匯編文件的功能就再方便不過了。
2、生成bin文件
fromelf.exe即keil下的一個處理elf文件的工具,elf文件英文名為Executable and Linking Format ,該文件包括符號表,調(diào)試信息,匯編等等,所以通過使用fromelf.exe可以輸出較多信息文件,比如hex、bin、asm等。
對于此工具詳細(xì)的說明文件可以參考:using_the_fromelf_utility.pdf
該文檔網(wǎng)上很容易搜索到,這里就不板書了。
如果你想省點事,可以直接使用cmd輸出formelf.exe的幫助信息,過程如下。
2、formelf.exe詳細(xì)說明
1、首先在windows運行欄中找到cmd命令輸入。
2、輸入命令行.fromelf.exe --help
bug菌對上面的輸出簡單的注釋了下。
ARM image conversion utilityfromelf [options] input_file
Options: --help display this help screen //【顯示幫助信息】 --vsn display version information//【顯示版本信息】 --output file the output file. (defaults to stdout for -text format)//【輸出文件。(-text格式默認(rèn)為stdout)】 8 --nodebug do not put debug areas in the output image//【不在輸出映像中放置調(diào)試域】 --nolinkview do not put sections in the output image//【不在輸出映像中放置段信息】
Binary Output Formats: --bin Plain Binary//【bin文件】 --m32 Motorola 32 bit Hex//【motol格式的hex文件】 --i32 Intel 32 bit Hex//【Intel格式的hex文件】 --vhx Byte Oriented Hex format//【面向字節(jié)的hex格式】
--base addr Optionally set base address for m32,i32
Output Formats Requiring Debug Information --fieldoffsets Assembly Language Description of Structures/Classes --expandarrays Arrays inside and outside structures are expanded
Other Output Formats: --elf ELF --text Text Information
Flags for Text Information -v verbose -a print data addresses (For images built with debug)//【打印數(shù)據(jù)地址信息】 -c disassemble code//【輸出匯編代碼】 -d print contents of data section//【打印數(shù)據(jù)域內(nèi)容】 -e print exception tables//【打印異常表】 -g print debug tables//【打印調(diào)試表】 -r print relocation information//【打印重定位信息】35 -s print symbol table//【打印符號表】 -t print string table//【打印字符串表】 -y print dynamic segment contents//【打印動態(tài)段內(nèi)容】 -z print code and data size information//【打印代碼與數(shù)據(jù)大小信息】
輸出bin和匯編
在keil中進行如下配置 ,表示在工程編譯以后所執(zhí)行的命令行。
命令行如下,方便大伙copy:
fromelf --text -c -o “$L@L.asm” “#L”
fromelf --bin -o “$L@L.bin” “#L”
確定配置好以后重新編譯,最終編譯器輸出如下信息。
從輸出信息來可以了解到bin文件和asm文件均由.axf文件通過fromelf工具轉(zhuǎn)化而來,相信轉(zhuǎn)化命令的通配符大家也可以理解了,輸出結(jié)果如下:
這樣看來.axf文件所包含的信息非常之多,其全稱為:Arm executable File,其實.axf文件與gcc中的elf文件是類似的,Keil默認(rèn)生成.axf文件。
如果在Keil中沒有勾選hex文件的生成,那么就用.axf文件來進行燒錄。
而如果勾選了Hex文件生成,其實就是Keil通過調(diào)用fromelf將axf轉(zhuǎn)換為hex文件,所以編譯后可以在輸出文件中同時看到axf和hex文件。
3、C與匯編混合展示
我們打開前面的.asm文件如下圖所示:
零零散散我們可以看到幾個C函數(shù),不過閱讀起來稍微有點吃力,大伙應(yīng)該還是比較喜歡閱讀debug時候匯編框中C語言與匯編語言一一對應(yīng)的形式,這樣也更好理解匯編語言。
1、生成.txt和.i文件
我們在keil中勾選如下幾項,然后進行重新編譯。
其中在工程目錄的*.txt即為匯編與C混合文件,而*.i為經(jīng)過了預(yù)處理的文件。
2、對比.c和.i文件
對于預(yù)處理過程主要是去掉注釋和展開宏等,下面我們對比一下源文件與.i文件。
3、查看.txt文件
生成的.txt即為C代碼與匯編的混合文件。
原文標(biāo)題:用Keil生成bin、匯編、C與匯編混合文件,再也不想debug了!
文章出處:【微信公眾號:嵌入式ARM】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
責(zé)任編輯:haq
-
編程
+關(guān)注
關(guān)注
88文章
3565瀏覽量
93536 -
keil
+關(guān)注
關(guān)注
68文章
1210瀏覽量
166580
原文標(biāo)題:用Keil生成bin、匯編、C與匯編混合文件,再也不想debug了!
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論