keil生成bin文件的兩種方法(多圖)

                                                keil生成bin文件的兩種方法(多圖)

寫在前面之前使用keil都是用的自帶的生成hex的文件對目標芯片進行燒錄,由於接觸過程序升級,明白其實寫在flash中的文件基本都是二進制的bin文件,而hex可以理解爲bin文件的帶地址的擴展版。寫本文前看到其他博主的生成方法,其中有借鑑、也有歸納。第一種爲常用keil自動生成方法,第二種爲擴展方法,對習慣使用命令行的同志比較方便。廢話不多說,進入正題。。。

 

方法一: 使用keil自帶的選項生成bin文件

該方法適用於已經編譯過的工程(至於keil如何編譯我就不細說了),在輸出文件夾下編譯器會生成XXX.axf文件。這裏強調一下axf文件的作用:axf文件是ARM芯片使用的文件格式,它除了包含bin代碼外,還包括了輸出給調試器的調試信息,例如每行C語言所對應的源文件行號等。與AXF文件經常一起看到的還有HEX文件,HEX文件包括地址信息,可直接用於燒寫或下載HEX文件。——摘自百度百科

關於hex.bin.axf.elf等文件的具體作用請自行百度,或者點擊  這裏

下面我們就是對axf文件進行格式轉換,使其生成bin文件。keil自帶的armcc編譯器有一個可執行文件,名字叫fromelf.exe我們以下的操作都是基於此命令,打開keil的option for target選項

打開user選項:這個選項代表用戶自定義的命令功能,其中我們是在編譯生成axf文件之後使用功能,所以使用第三個After Build

根據一些博主的說法直接勾選打開folder找到可執行文件一般在keil的安裝目錄下:

然後再鍵入命令  C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe  --bin -o ./Obj/@L.bin  ./Obj/@L.axf   這種方法也不是不行,只是執行會報錯,熟悉命令行的同學都知道這裏./代表的是相對路徑操作當前目錄下的文件,也就是說你必須在當前的armcc的bin文件夾下再建一個名爲Obj的文件夾,然後把需要的文件複製過來纔可以正常執行命令,否則執行keil的build功能就會報錯,並且不會產生bin文件。這裏推薦的做法是選擇目標文件的絕對路徑(相對路徑和絕對路徑請自行查閱),比如打開我的工程目錄,找到axf文件所在的位置(默認輸出到Object文件夾下),直接複製這個文件的路徑替換上面的./Obj

輸出路徑選擇你要保存bin文件的文件夾,這裏我是新建的一個名爲bin_out的文件夾,複製路徑替換./Obj。

最終我在keil裏面的User Command裏面輸入的如下:

C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe --bin -o   C:\Users\Administrator\Desktop\uart_test\bin_out/@L.bin  C:\Users\Administrator\Desktop\uart_test\FM33G0XX_TesterV1.0\Objects/@L.axf

編譯後不報錯並且生成bin文件,其中C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe  可以不寫命令的路徑,keil會自動去armcc的bin文件下去尋找,也就可以簡化:

fromelf.exe --bin -o   C:\Users\Administrator\Desktop\uart_test\bin_out/@L.bin  C:\Users\Administrator\Desktop\uart_test\FM33G0XX_TesterV1.0\Objects/@L.axf

看到這有人會說what the F**K爲啥會這麼麻煩,粘貼來粘貼去就沒有什麼簡便的方法嗎?ok來看方法2

方法二: 使用Cygwin或Git for windows終端的命令行執行

Cygwin是一個在windows平臺上運行的類UNIX模擬環境,是cygnus solutions公司開發的自由軟件(該公司開發的著名工具還有eCos,不過現已被Redhat收購)。它對於學習UNIX/Linux操作環境,或者從UNIX到Windows的應用程序移植,或者進行某些特殊的開發工作,尤其是使用GNU工具集在Windows上進行嵌入式系統開發,非常有用。——百度百科

由於本人系統的原因並未安裝cygwin,我用的是Git bash,當然方法基本都是相同的。

首先要把armcc的路徑放到windows的環境變量中:

打開bash切換到keil輸出的文件目錄

輸入fromelf命令可以看到這條命令不止有轉換bin文件的功能,還可以有生成text、elf、32bit hex等的功能,但這裏我們僅用bin選項

執行命令fromelf --bin -o ../../bin_out/a.bin ./xx.axf

這裏我把生成的bin文件單獨放到外部方便查找,具體的文件名稱根據各自需要填寫。

 

結語:

以上僅代表個人觀點,如有不正確之處歡迎指正!轉載請註明出處,謝謝!若文章對您有幫助,或者覺得不錯,動動小手,點個贊再走吧 ^_^