導讀 | 咱們在編譯生成固件的時候,有時候生成Hex文件有時候生成Bin文件,這兩種文件有什麼關係呢,它們存在的價值又是什麼呢? |
Hex文件和Bin文件是什麼html
Hex文件是以ASCII文本形式保存編譯後的二進制文件信息。Hex文件使用ASCII文本的形式保存Bin文件的內容和Bin文件的一些配置信息。Hex文件能夠由下載器(好比jlink)燒寫到MCU的ROM中。linux
Bin文件是MCU固件燒寫的最終形式,也就是說MCU的ROM中燒寫的內容徹底就是Bin文件的內容。htm
Hex文件和Bin文件的關係get
Hex文件能夠說是MCU固件的中間形式,由下載器的軟件根據Hex文件生成Bin文件再燒寫到MCU的ROM中。既然Bin文件是最終咱們想要的,那麼Hex文件有什麼存在價值?咱們爲何不直接生成Bin文件,卻要生成Hex文件呢?這就要從Hex文件的內容格式提及來了。編譯
Hex的內容格式table
從上面咱們知道Hex文件不僅是保存Bin文件的內容,還有一些配置信息。咱們以一個例子大概說下Hex文件的結構,見下圖:
變量
上圖的Hex文件總共6行的內容。每行都是以':'開始,以後是地址域、數據類型、數據域和校驗和。
軟件
最後一行的數據類型是0x01,表明文件結束了。
配置
Hex文件和Bin文件的存在價值下載
從上面的介紹中,咱們發現Hex文件中每行的內容,就像咱們發送串口數據的數據幀,而且最後一行還指示出文件結束了。咱們得出hex文件的兩個優勢:
Hex文件有更好的可讀性,最重要的是hex文件可以保證固件在保存與傳輸時的完整性。所以hex文件更適用於保存與傳輸。而Bin文件是純二進制文件,內部只包含程序編譯後的機器碼和變量數據。當文件損壞時,咱們也沒法知道文件已損壞。不過Bin文件做爲固件的最終形式,在使用串口下載程序或者遠程升級時,是不可替代的。