2015-04-27 54 views
0

嘗試運行Atmel sam3s的閃爍示例並檢查堆棧指針... SP在主功能啓動時的值爲0x20000238,該值等於Ram base + RW + ZI爲這個樣本。使用keil的Cortex-M3堆棧組織

基礎RAM地址該芯片是:0x20000000 總RAM大小爲:0x10000的

我預計SP對0x20010000和下來進行初始化。 任何人都可以解釋,如果我錯了或不?

+1

你錯了,因爲鏈接器沒有在其默認配置中考慮RAM大小,所以堆棧從儘可能最低的地址開始。這些部分是一個接一個放置的。如果你認爲這可能是最糟糕的佈局,因爲(小)堆棧正好適合你的RW數據,好吧,你是對的。 – Pait

+0

是的,這不是一個明智的堆棧。 – Taheri

回答

0

由於Pait說(他/她應該回答這個問題,所以我可以接受它,我認爲), 我錯了,認爲堆棧將被放置在RAM的末尾默認情況下。但我認爲把它放在那裏是明智的。

這是我如何做到這一點對於我的SAM3S微,通過改變分散文件

LR_IROM1 0x00400000 0x00080000 { ; load region size_region 
    ER_IROM1 0x00400000 0x00080000 { ; load address = execution address 
    *.o (RESET, +First) 
    *(InRoot$$Sections) 
    .ANY (+RO) 
    } 
    RW_IRAM1 0x20000000 0x00010000 { ; RW data 
    .ANY (+RW +ZI) 
    } 
    RW_STACK 0x2000C000 UNINIT 0x4000 { ; STACK data 
    *.o (STACK) 
    } 
} 

RAM鹼= 0x20000000

總RAM = 64 KB

擬堆棧大小= 16KB