-
MSP
(主堆棧指針)
鎖定
主堆棧指針總是指向棧頂位置。一般堆棧的棧底不能動,所以數據入棧前要先修改堆棧指針,使它指向新的空餘空間然後再把數據存進去,出棧的時候相反。按先進後出的原則存取數據。
- 中文名
- 主堆棧指針
- 外文名
- Main Stack pointer
- 應 用
- ARM處理器開發
- Cortex-M3內核中有兩個堆棧指針(MSP & PSP),但任何時刻只能使用到其中一個。
- 復位後處於線程模式特權級,默認使用MSP。
- 通過SP訪問到的是正在使用的那個指針,可以通過MSR/MRS指令訪問指定的堆棧指針。
- 通過設置CONTROL寄存器的bit[1]選擇使用哪個堆棧指針。CONTROL[1]=0選擇主堆棧指針;CONTROL[1]=1選擇進程堆棧指針。
- Handler模式下,只允許使用主堆棧指針MSP。
Cortex-M3有兩個堆棧指針,它們是banked,任一時刻只能使用其中一個;對堆棧指針SP(R13)的操作是對當前有效的堆棧指針的操作。
兩個堆棧分別為:主堆棧MSP和進程堆棧PSP,CONTROL[1]決定選擇哪個,當CONTROL[1]=0時,使用MSP,CONTROL=1時,使用PSP;
handler模式永遠使用MSP:
- 如果線程模式使用的是MSP,則線程模式和handler使用一個堆棧,即MSP;
- 如果線程模式使用的是PSP,則進入handler時,自動壓棧使用的是PSP,進入handler後切換到MSP,退出handler時在切換到PSP;
在特權級下,可以指定具體的堆棧指針進行操作:
MRS R0, MSP MSR MSP, R0 MRS R0, PSP MSR PSP, R0