0
嘗試運行Atmel sam3s的閃爍示例並檢查堆棧指針... SP在主功能啓動時的值爲0x20000238,該值等於Ram base + RW + ZI爲這個樣本。使用keil的Cortex-M3堆棧組織
基礎RAM地址該芯片是:0x20000000 總RAM大小爲:0x10000的
我預計SP對0x20010000和下來進行初始化。 任何人都可以解釋,如果我錯了或不?
嘗試運行Atmel sam3s的閃爍示例並檢查堆棧指針... SP在主功能啓動時的值爲0x20000238,該值等於Ram base + RW + ZI爲這個樣本。使用keil的Cortex-M3堆棧組織
基礎RAM地址該芯片是:0x20000000 總RAM大小爲:0x10000的
我預計SP對0x20010000和下來進行初始化。 任何人都可以解釋,如果我錯了或不?
由於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
你錯了,因爲鏈接器沒有在其默認配置中考慮RAM大小,所以堆棧從儘可能最低的地址開始。這些部分是一個接一個放置的。如果你認爲這可能是最糟糕的佈局,因爲(小)堆棧正好適合你的RW數據,好吧,你是對的。 – Pait
是的,這不是一個明智的堆棧。 – Taheri