MSP(主堆疊指針)

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

相關詞條

熱門詞條

聯絡我們