tft每日頭條

 > 科技

 > 編譯完成後如何找到hex的文件

編譯完成後如何找到hex的文件

科技 更新时间:2025-02-02 23:43:11


在stm32開發中,經常會碰到hex文件、bin文件與axf文件,這些都是可以燒寫到闆子裡運行的文件。這三個文件有什麼區别呢?在這之前,先來一起回顧一下C語言編譯的過程:

編譯的原理

在之前的C語言筆記《C程序的編譯過程》中,有簡單的分析了C程序編譯的幾個過程:

編譯完成後如何找到hex的文件(嵌入式筆記hex文件)1

STM32也是用C語言來開發,也會經過類似的編譯過程,隻不過我們常常用MDK或者其它IDE來編譯,其編譯過程如下:

編譯完成後如何找到hex的文件(嵌入式筆記hex文件)2

例如,我們的LED程序編譯過程如下:

編譯完成後如何找到hex的文件(嵌入式筆記hex文件)3

在IDE中進行編譯時,我們隻需點擊編譯按鈕即可完成這些過程,編譯過程用到的工具(.exe文件)在IDE的安裝目錄下的某個文件夾下,比如我們這裡用的MDK的編譯工具路徑:

編譯完成後如何找到hex的文件(嵌入式筆記hex文件)4

一般這些IDE或者工具集的一些編譯工具都放在bin文件夾。再比如我們MinGW工具集(裡面包含gcc/g 編譯器,可以編譯在電腦上運行的程序)的編譯工具所在路徑為:

編譯完成後如何找到hex的文件(嵌入式筆記hex文件)5

回歸正題,我們的MDK編譯時就是使用安裝路徑下的這些編譯工具來完成我們的編譯過程。究其本質,我們在cmd命令窗口也是可以通過命令來編譯我們的STM32程序的(前提是配好環境變量,否則得到編譯工具所在的路徑下進行編譯),但是我們不會這樣幹(有這功夫就可以去學學Linux),因為IDE已經給我們提供了很大的便利。比如:

編譯完成後如何找到hex的文件(嵌入式筆記hex文件)6

下面看一下我們在cmd窗口下運行armcc命令看會發生什麼:

編譯完成後如何找到hex的文件(嵌入式筆記hex文件)7

我們看到了很多關于armcc命令的提示說明,有些常用的編譯選項已經集成在MDK裡供我們選擇,比如:

編譯完成後如何找到hex的文件(嵌入式筆記hex文件)8


可燒錄的文件

axf文件、hex文件與bin文件都是可以運行在我們的stm32上的,它們都存儲了編譯器根據源代碼生成的機器碼,根據應用場合的不同,它們又有所區别。

axf文件:包含調試信息。 hex文件:包含地址信息。 bin文件:最直接的代碼映像。

axf文件是編譯默認生成的文件,不僅包含代碼數據,而且還包含着調試信息,在MDK裡進行debug調試用的就是這個文件。hex文件在MDK裡要勾選如下選項才可以生成:

編譯完成後如何找到hex的文件(嵌入式筆記hex文件)9

hex 文件是一種使用十六進制符号表示的代碼記錄, 記錄了代碼應該存儲到FLASH 的哪個地址,下載器可以根據這些信息輔助下載。

bin文件是根據axf文件生成的,需要在MDK下添加類似如下格式命令來生成對應的bin文件:

編譯完成後如何找到hex的文件(嵌入式筆記hex文件)10

bin文件就是最小的可以運行的文件了,其包含最直接的代碼映像。這三個文件中axf文件最大,hex文件次之,bin文件最小,如:

編譯完成後如何找到hex的文件(嵌入式筆記hex文件)11

關于它們的區别這裡隻是簡單的闡述說明,有時間、有精力、有興趣的朋友可以去分析它們裡面的内容。


離線文件的燒錄方法

hex文件的燒錄,我們可以使用FlyMcu工具通過串口來下載:

編譯完成後如何找到hex的文件(嵌入式筆記hex文件)12

FlyMcu不可以燒bin文件,因為上面說過了bin文件隻包含最直接的代碼映像,不包含地址信息,會出現如下錯誤:

編譯完成後如何找到hex的文件(嵌入式筆記hex文件)13

bin文件可以使用STM32CubeProgrammer軟件通過STLINK進行下載:

編譯完成後如何找到hex的文件(嵌入式筆記hex文件)14


以上就是本次的分享,如有錯誤歡迎指出,謝謝!

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved