1. 程式人生 > 其它 >Cortex-M3 雙堆疊指標(MSP&PSP)

Cortex-M3 雙堆疊指標(MSP&PSP)

參考:https://www.cnblogs.com/utank/p/11264175.html

【雙堆疊指標(MSP&PSP)】

  • Cortex-M3核心中有兩個堆疊指標(MSP & PSP),但任何時刻只能使用到其中一個。
  • 復位後處於執行緒模式特權級,預設使用MSP。
  • 通過SP訪問到的是正在使用的那個指標,可以通過MSR/MRS指令訪問指定的堆疊指標。
  • 通過設定CONTROL暫存器的bit[1]選擇使用哪個堆疊指標。CONTROL[1]=0選擇主堆疊指標;CONTROL[1]=1選擇程序堆疊指標。
  • Handler模式下,只允許使用主堆疊指標MSP。

【雙堆疊指標在OS中的應用】
典型的OS環境中,MSP和PSP的用法如下:

  • MSP用於OS核心和異常處理。
  • PSP用於應用任務。

【雙堆疊指標的初始化】

  • 系統復位時從0x00000000處讀出MSP的初始值。
  • 在OS初始化時,對PSP進行初始化。


【PSP指標在不同任務間切換】

  • 用任務A的SP執行入棧操作,並儲存任務A的SP。
  • 設定PSP指向任務B的棧空間,用任務B的SP執行出棧,隨後開始執行任務B。

所以核心是PSP還是MSP總結為:

1)不使用OS時: 只用到MSP(中斷和非中斷都使用MSP);
2)使用OS時(如UCOSII): main函式和中斷使用MSP; 各個Task(執行緒)使用PSP(即任務棧);

當帶作業系統從APP區跳轉到BOOT區的時候需要將SP設定為MSP,否則在BOOT區中使用中斷將會引發硬體錯誤!

如果在APP中打開了看門狗那麼當跳轉到BOOT中時也需要定時喂狗,否則會觸發看門狗超時復位!