目錄
介紹
Keil自帶常用命令概覽
fromelf介紹
Keil可燒錄文件概述
核心差異概覽
.axf文件獲取
.hex文件獲取
.bin文件生成
?編輯
補充:生成可執行文件的匯編代碼(.asm文件)
Keil自帶常用命令詳解
核心功能??
??格式轉換??
??輸出路徑與文件名自動化?
工作流程??
介紹
????????首先,要明確的是:對于Before Build/Rebuild和After Build/Rebuild這樣的指令,這是在Keil的User設置頁面定義的用戶自定義命令,它會在Build/Rebuild執行前/后自動執行。來執行用戶希望的一些操作。用戶在User Command中填寫腳本指令,腳本可以是自己編寫,也可以是Keil自帶。最后通過是否勾選Run #前面的勾選框,來決定腳本是否運行。
Keil自帶常用命令概覽
fromelf --bin -o "$L@L.bin" "#L"fromelf --text -s -o "$L@L.sym" "#L"fromelf --text -c -o "$L@L.asm" "#L"
fromelf介紹
大家可以在類似的Keil路徑下找到Keil編譯所用到的工具,如下圖,其中fromelf.exe用于對生成工程文件進行格式轉換的,其它.exe的作用可以自行了解,本文不敘述。
Keil可燒錄文件概述
上文提到fromelf.exe用于對生成工程文件進行格式轉換,keil生成的可燒錄文件一般是三種。
- bin文件(只有程序的二進制數據,沒有任何“標簽”):需手動指定起始地址。
- hex文件(Intel制定的標準十六進制文件):包含地址信息(可以直接下載)。
- axf文件(ARM芯片使用的文件格式,全稱ARM Executable File):包含調試信息,debug用。
核心差異概覽
??特性?? | ??.axf?? (ARM Executable Format) | ??.hex?? (Intel HEX) | ??.bin?? (Binary Image) |
---|---|---|---|
??內容?? | 機器碼 + 調試信息 + 地址信息 | 機器碼 + 地址信息 + 校驗和 | 純二進制機器碼 |
??地址信息?? | ? 包含(調試用) | ? 自帶存儲地址(燒錄自動定位) | ? 無(需手動指定起始地址) |
??調試信息?? | ? 完整(符號表、函數名、變量地址等) | ? 無 | ? 無 |
??文件大小?? | 最大(含額外調試數據) | 中等(ASCII格式,體積約為bin的2倍) | 最小(純二進制) |
??可讀性?? | ? 需專用工具解析 | ? 文本格式,可用記事本查看 | ? 二進制,需HEX編輯器查看 |
??燒錄方式?? | 不直接燒錄(需轉換) | 直接燒錄(工具自動解析地址) | 直接燒錄(需手動輸入地址) |
??典型應用?? | 開發調試階段(Keil Debug/J-Link J-Scope) | 量產燒錄、串口升級、通用編程器支持 | Bootloader、OTA升級、存儲敏感場景 |
.axf文件獲取
.axf文件,keil默認生成,使用下載器(如J-Link)下載時/Debug調試時,下載的就是.axf文件。
.hex文件獲取
勾選"Create HEX File"選擇框以生成hex文件。
.bin文件生成
在"After Build/Rebuild"對應的命令行添加生成。
注意:.bin文件生成的時機。
.axf文件是Build/Rebuild生成;.bin文件是由.axf文件生成的,所以這個User Command是放在After Build/Rebuild".
fromelf --bin -o "$L@L.bin" "#L"
補充:生成可執行文件的匯編代碼(.asm文件)
????????另外,.axf文件也可以生成.asm文件,像C/C++這些高級語言一樣,asm(匯編)也是編程語言的一種(底層編程語言),只不過更接近底層,必要時更能幫助開發者分析程序底層邏輯、優化性能或調試問題。
????????需要區分的一點是,編程語言(如C/C++,ASM)直面用戶,用戶可以直接編程;經編譯生成的機器語言(如.axf/.hex/.bin)是硬件(如單片機)能夠讀懂的。
Keil自帶常用命令詳解
常用的也就以下三個,下面以fromelf.exe --bin -o "$L@L.bin" "#L"
詳解使用方法。?
??命令示例?? | ??輸出內容?? | ??應用場景?? |
---|---|---|
fromelf --bin -o "$L@L.bin" "#L" | 二進制機器碼(.bin) | 固件燒錄、量產部署 |
fromelf --text -s -o "$L@L.sym" "#L" | 符號表(函數/變量地址) | 內存布局分析、鏈接優化 |
fromelf --text -c -o "$L@L.asm" "#L" | 反匯編代碼(.asm) | 底層調試、性能調優 |
????????在Keil編譯器中,命令?fromelf --bin -o "$L@L.bin" "#L"
?主要用于在編譯完成后自動將生成的?.axf
?可執行文件轉換為可直接燒錄到嵌入式設備的二進制文件(.bin
)。以下是其詳細作用及工作原理解析:
核心功能??
??格式轉換??
--bin
?參數指定輸出為二進制格式(.bin
),該格式僅包含純機器碼,不含調試信息或符號表,適合直接燒錄到微控制器的Flash中。- 輸入文件?
#L
?指向Keil編譯生成的?.axf
?文件(ARM Executable Format),包含完整的程序代碼、數據及調試信息。
??輸出路徑與文件名自動化?
假設.axf文件的絕對路徑是:D:\project\output\app.axf
?
"$L@L.bin"
:動態生成輸出文件的路徑和名稱:
$L
:表示?.axf
?文件的??目錄路徑??(不含文件名),例如?D:\project\output\
@L
:表示?.axf
?文件的??主文件名??(不含擴展名),例如若?.axf
?文件為?app.axf
,則?@L
?為?app
。"$L@L.bin"
組合后輸出路徑如?D:\project\output\app.bin
。
"#L":表示輸入的.axf文件的完整地址
#L
:表示完整的?.axf
?文件路徑(含文件名),例如?D:\project\output\app.axf
。
工作流程??
- ??編譯觸發??:當Keil完成代碼編譯并生成?
.axf
?文件后,該命令作為“構建后操作”(After Build/Rebuild)自動執行。 - ??轉換過程??:
fromelf.exe
?解析?.axf
?文件,提取純二進制數據,生成?.bin
?文件,并保存到指定路徑。 - ??輸出位置??:生成的?
.bin
?文件默認位于與?.axf
?相同的目錄中(通過?$L
?指定),文件名與工程設置的 ??“Name of Executable”?? 一致。
注意:如果編譯時候報錯,一般的可能是文件路徑問題。注意在下面的設置頁正確設置存儲路徑和文件名,確保輸出目錄存在。