我想監視C嵌入式ARM MCU上的堆棧指針。隨着項目的發展,我想知道剩下多少空間,並且如果需要的話可以繪製更多地圖。ARM彙編 - 監視器堆棧指針
我已經知道編譯時生成的映射文件的堆棧的起始地址和頂端地址。
我想獲得sp所指向的地址,所以我可以做一些基本的數學計算,並以百分比爲基礎監視堆棧,但我是ARM新手,不明白爲什麼我的程序集不工作。
這是我在做什麼:
int stackptr;
asm
{
LDR r0, =stackptr // put address of C variable stackptr in r0
MOV r1, sp // move value of sp to r1
STR r1, [r0] // put value of r1 in address contained in r0 (stackptr)
}
// math using stackptr...
如果我看到存儲在stackptr地址,其在堆棧的一開始就和它不改變(我打電話這個每100ms)。我預計這會在我的堆棧中間的某處跳動。另外,如果我嘗試獲取堆棧基地址和限制(使用與sb和sl相同的方法),我只能得到0。從我的研究來看,我並不擔心這一點,似乎他們並不總是被使用。
感謝您的幫助
該代碼是否通過中斷運行?如果是這樣,它可能有自己的堆棧(和堆棧指針)。 – EOF 2014-10-02 22:46:02
我無法與您的特定平臺說話,但有多種方法可以完成此任務。你可能想看看[IAR寫的這篇精彩的文章](http://www.iar.com/Global/Resources/Developers_Toolbox/Building_and_debugging/Mastering_stack_and_heap_for_system_reliability.pdf)。 – 2014-10-02 23:28:53
這是一個Cortex-M(只有'[2 SP寄存器](http://infocenter.arm.com/help/topic/com.arm.doc.dui0552a/BABDGADF.html)),還是一個Cortex- A /舊式架構(最多8個存儲副本)?另外,是否有任何一種操作系統或其他上下文切換? – Notlikethat 2014-10-02 23:47:48