在stm32開發中,經常會碰到hex文件、bin文件與axf文件,這些都是可以燒寫到闆子裡運行的文件。這三個文件有什麼區别呢?在這之前,先來一起回顧一下C語言編譯的過程:
在之前的C語言筆記《C程序的編譯過程》中,有簡單的分析了C程序編譯的幾個過程:
STM32也是用C語言來開發,也會經過類似的編譯過程,隻不過我們常常用MDK或者其它IDE來編譯,其編譯過程如下:
例如,我們的LED程序編譯過程如下:
在IDE中進行編譯時,我們隻需點擊編譯按鈕即可完成這些過程,編譯過程用到的工具(.exe文件)在IDE的安裝目錄下的某個文件夾下,比如我們這裡用的MDK的編譯工具路徑:
一般這些IDE或者工具集的一些編譯工具都放在bin文件夾。再比如我們MinGW工具集(裡面包含gcc/g 編譯器,可以編譯在電腦上運行的程序)的編譯工具所在路徑為:
回歸正題,我們的MDK編譯時就是使用安裝路徑下的這些編譯工具來完成我們的編譯過程。究其本質,我們在cmd命令窗口也是可以通過命令來編譯我們的STM32程序的(前提是配好環境變量,否則得到編譯工具所在的路徑下進行編譯),但是我們不會這樣幹(有這功夫就可以去學學Linux),因為IDE已經給我們提供了很大的便利。比如:
下面看一下我們在cmd窗口下運行armcc命令看會發生什麼:
我們看到了很多關于armcc命令的提示說明,有些常用的編譯選項已經集成在MDK裡供我們選擇,比如:
axf文件、hex文件與bin文件都是可以運行在我們的stm32上的,它們都存儲了編譯器根據源代碼生成的機器碼,根據應用場合的不同,它們又有所區别。
axf文件:包含調試信息。
hex文件:包含地址信息。
bin文件:最直接的代碼映像。
axf文件是編譯默認生成的文件,不僅包含代碼數據,而且還包含着調試信息,在MDK裡進行debug調試用的就是這個文件。hex文件在MDK裡要勾選如下選項才可以生成:
hex 文件是一種使用十六進制符号表示的代碼記錄, 記錄了代碼應該存儲到FLASH 的哪個地址,下載器可以根據這些信息輔助下載。
bin文件是根據axf文件生成的,需要在MDK下添加類似如下格式命令來生成對應的bin文件:
bin文件就是最小的可以運行的文件了,其包含最直接的代碼映像。這三個文件中axf文件最大,hex文件次之,bin文件最小,如:
關于它們的區别這裡隻是簡單的闡述說明,有時間、有精力、有興趣的朋友可以去分析它們裡面的内容。
hex文件的燒錄,我們可以使用FlyMcu工具通過串口來下載:
FlyMcu不可以燒bin文件,因為上面說過了bin文件隻包含最直接的代碼映像,不包含地址信息,會出現如下錯誤:
bin文件可以使用STM32CubeProgrammer軟件通過STLINK進行下載:
以上就是本次的分享,如有錯誤歡迎指出,謝謝!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!