blog:2024-07-18_share_keil_和eclipse_軟體編譯環境下bin和ram以及flash大小及關係
2024-07-18 Share: Keil 和Eclipse 軟體編譯環境下bin和ram以及flash大小及關係
Local Backup
一. keil 軟體編譯環境
二. 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程式碼片段:
例如函數、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:
bin文件
從可執行程式的角度來說,如果一個資料未被初始化,就不需要為其分配空間,所以.bss 並不佔用可執行檔的大小,僅僅記錄需要用多少空間來儲存這些未初始化的數據,而不分配實際空間。
hex、bin、flash三者的大小關係
Permalink blog/2024-07-18_share_keil_和eclipse_軟體編譯環境下bin和ram以及flash大小及關係.txt · Last modified: 2024/07/18 09:21 by
jethro