User Tools

Site Tools

blog:2024-07-18_share_keil_和eclipse_軟體編譯環境下bin和ram以及flash大小及關係



2024-07-18 Share: Keil 和Eclipse 軟體編譯環境下bin和ram以及flash大小及關係

Local Backup

一. keil 軟體編譯環境

  • Program Size: Code=65228 RO-data=5302 RW-data=48 ZI-data=1681
  • keil軟體編譯後會出現上面的提示,其意義如下:
    • Code:指程式中程式碼的位元組數
    • RO-data:指程式中定義的常數位元組數
    • RW-data :程式中已初始化的變數位元組數
    • ZI-Data :程式中未初始化的變數位元組數
  • 可計算出flash和RAM的佔用情況:
    • flash = Code + RO-data + RW-data = 65228 Byte + 5302 Byte + 48 Byte = 70578 Byte
    • ram = RW-data + ZI-data = 48 Byte + 1681 Byte = 1729 Byte

二. Eclipse 軟體編譯環境

  •    text data bss dec hex filename
    128288 684 17160 146132 23ad4 TLSR8258_Mesh_Dimmer_Light_20240430.elf
    128288 684 17160 146133 (14613)
  • 資料說明:
    .text: 128288 Byte
    .data: 684 Byte
    .bss: 17160 Byte
    dec: text+data+bss=146132 Byte (十進位)
    hex: text+data+bss=0x23ad4 Byte (十六進位)
  • RAM的计算 = data + bss = RW Data + ZI Data
  • RAM中的大小 = data + bss = 684 Byte + 17160 Byte= 17844 Byte
  • bin = text + data = Code + RO Data + RW Data
  • Code :代表執行的程式碼,程式中所有的函數都位於此處。
  • RO data:代表唯讀數據,程式中所定義的全域常數資料和字串都位於此處。
  • RW data:代表已初始化的讀寫數據,程式中定義並且初始化的全域變數和靜態變數位於此處。
  • ZI data:代表未初始化的讀寫數據,程式中定義了但沒有初始化的全域變數和靜態變數位於此處。
  • text程式碼片段:
    • (.text)= (Code + RO data) ,存放代碼、常數及向量表,唯讀。 最後存放在FLASH。
  • 例如函數、const int table[]、中斷向量表。
  • data資料段:
    • (.data) = (RW data),存放已初始化的全域/靜態變數,可讀可寫。 最後存放在FLASH。
    • data放的是初始化的變數,並且同時計入RAM和FLASH。連結器把資料分配在FLASH中然後在啟動程式碼中從ROM拷貝到RAM。
    • 例如int32_t myVar = 0x12345678;,data段僅包含初始化所用的資料(本例中的0x12345678),不含變數(myVar)。變數myVar不是常數,所以最終會存放於RAM內。但是初始值(0x12345678)是一個常數,因此可以放在FLASH裡。
  • bss:
    • (.bss) = (ZI data) ,存放所有未初始化的全域/靜態變量,可讀可寫。 最終存放在RAM。
    • 例如int32_t myGlobal; ,函數初始化bss段就是把未初始化的變數置0。
  • bin文件
    • binary文件,即二進位。
    • 執行raw binary很簡單,只需要將程式載入到其起始位址,就可以執行;
  • 從可執行程式的角度來說,如果一個資料未被初始化,就不需要為其分配空間,所以.bss 並不佔用可執行檔的大小,僅僅記錄需要用多少空間來儲存這些未初始化的數據,而不分配實際空間。

hex、bin、flash三者的大小關係

  • 在燒錄程式時往往將hex檔案燒錄到flash中,但hex檔案的大小和flash的大小沒什麼必然的關係,hex檔案大於單晶片flash的大小也能燒錄到單晶片中。原因在於真正寫入flash的不是hex文件,而是hex檔案中的bin檔。有些軟體直接產生的就是bin文件,而不是hex文件。

TAGS

  • 33 person(s) visited this page until now.

Permalink blog/2024-07-18_share_keil_和eclipse_軟體編譯環境下bin和ram以及flash大小及關係.txt · Last modified: 2024/07/18 09:21 by jethro

oeffentlich