複製鏈接
請複製以下鏈接發送給好友

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