STM32有兩個存儲空間,一個是片上的FLASH,一個是片上的RAM。RAM相當于內存,FLASH相當于硬盤。(以下英文大小寫不分)
Keil下,工程編譯完成總會出現上面的信息,這些信息都代表什么呢?代表程序占用的空間。
Code表示程序代碼部分
RO-data 表示程序定義的常量(如:intconst x等);
RW-data 表示已初始化的全局變量
ZI-data 表示未初始化的全局變量,以及初始化為0的變量
下面給出三個值:
RO Size= Code + ROData (程序占用FLASH空間的大小)
RW Size=RW Data + ZIData (運行時程序占用RAM空間的大小)
ROM Size=Code + RO Data + RWData (燒寫時程序占用FLASH空間的大小)
我們都知道,在燒寫程序的時候,需要燒寫bin文件或者hex文件到STM32的flash當中,被燒寫的文件稱為映像文件image。Image的內容包含三部分:code,RO-data 和RW-data。
為什么Image不包含ZI數據呢,是因為ZI數據都是0,沒必要包含,只要程序運行之前將ZI數據所在的區域(這一區域在RAM中)一律清零即可。包含進去反而浪費flash存儲空間。
STM32上電啟動以后,cpu根據boot0和boot1的硬件引腳決定從flash還是ram中啟動,默認是從flash中啟動;啟動之后會搬運rw-data到ram,但是不會搬運code;也就是說cpu執行的代碼是在flash中讀取的,而不是在ram中。當然這個flash是nor型的.
-
FlaSh
+關注
關注
10文章
1622瀏覽量
147761 -
RAM
+關注
關注
8文章
1367瀏覽量
114536 -
STM32
+關注
關注
2266文章
10873瀏覽量
354862
發布評論請先 登錄
相關推薦
評論