Keil5中堆疊相關知識

2021-09-29 05:11:49 字數 964 閱讀 3253

網路上蒐集整理的資料,非原創!

keil編譯資訊中的:program size:code=xx  ro-data=xx   rw-data=xx   zi-data=xx

其中:

code: 儲存到flash[rom]中的程式**。(文字段)

ro-data:(read only)唯讀常量的大小,如const型。(資料段)

rw-data:(read write) 初始化了可讀寫變數的大小。即已初始化為非零的全域性變數。 (資料段)

zi-data:(zero initialize) 沒有初始化或初始化為0的可讀寫的變數的大小(不會被算做**裡,因為不會被初始化)。  (bbs段)

rom(flash) size = code+ro-data+rw-data;

ram size = rw-data+zi-data

如果乙個變數被初始化為0,則該變數的處理方法與未初始化變數一樣放在zi區法域。即arm c程式中,所有的示初始化變數都會被自動初始化為0。

總結:1、c中的指令以及常量被編譯後是ro型別資料

2、c中的未被始化或初始化為0的變數編譯後是zi型別資料。

3、c中已被初始化成非0的值的變數編譯後是rw型別資料

4、以上變數指全域性變數,區域性變數是以上程式中在棧中分配。

rom指:nand flash,nor flash

ram指:psram,sdram,ddram

keil ide的編譯資訊在工程資料夾的xx.map檔案中,stm32的ram分割槽從0x0200 0000開始,靜態區、堆、棧。

所有的全域性變數,包括靜態變數之類的,全部儲存在靜態儲存區。然後是堆區(如沒用到malloc,則沒有該區),之後是棧區,棧在程式中儲存區域性變數。

堆疊增長方向

堆在使用時會從低位址往上加,而棧是從__initial_sp開始往下減。 

keil5錯誤集錦

user api led.h 4 error 11 d unrecognized preprocessing directive 預編譯出錯。可能是字母打錯了 fwlib src stm32f10x rcc.c 273 warning 223 d function assert param decl...

keil5 編譯不成功

學習使用stm32標準庫的時候,會使用各種各樣的標頭檔案,使用標頭檔案時要在keil介面魔術棒配置裡面新增檔案路徑,我在模仿編寫例程時,沒有把所有標頭檔案路徑包含進去,導致編譯不成功 另外就是檔案路徑包含了中文,keil5也會找不到相關標頭檔案。我挺佩服st的韌體庫的,利用巨集定義大大增加了程式的可...

keil5除錯常見的問題

唉 真無語 我們總想著跑快點卻忘了 自己走路還不是很穩 在學stm32時候 總是會出現各種問題,這麼多 你不可能 心算就能算出來 出了問題 所以 會除錯就顯得特別的重要,但是我一開沒去研究除錯 導致遇到問題時 只能乾瞪眼 一點點對比 猜測 這樣做實在是浪費時間 所以這次寫一篇文章 記錄下自己的學習之...