|
本帖最后由 MNwcy 于 2021-3-15 11:04 編輯
在看Cortex-M3和Cortex-M4內(nèi)核權(quán)威指南這本書的時候,發(fā)現(xiàn)了“棧幀”這個概念。我從書上理解的是:中斷來臨后會將內(nèi)部寄存器以及內(nèi)部特殊寄存器進(jìn)行入棧,入棧的寄存器是固定的那幾個,反正就是八個字大。ò↑c寄存器的情況是26個字),但是我在一個stm32f407的帶定時器中斷的簡單例程進(jìn)debug看了下匯編代碼。發(fā)現(xiàn)了不管是子函數(shù)調(diào)用還是跳轉(zhuǎn)到中斷服務(wù)函數(shù),入棧保存的數(shù)據(jù)根本就不是權(quán)威指南說的8個字或者26個字,而是只入棧要跳轉(zhuǎn)的函數(shù)中會被改變的內(nèi)部寄存器,所以就又不懂“棧幀”了。難道是這里說的“棧幀”僅僅是為了服務(wù)RTOS等嵌入式操作系統(tǒng)定義的么?為了能更方便的從棧中提取到自己想要的內(nèi)部寄存器的值,利用棧幀規(guī)定好每個位置保存的是哪個寄存器的值?也就是說自己寫的裸機(jī)程序編譯器只會把需要保存的寄存器保存,不會改變的寄存器直接不保存?
不知道我說的清不清楚,希望懂得老哥們能給小弟答疑解惑!先謝為敬
|
|