Cortex-M3 雙堆疊指標(MSP&PSP)
阿新 • • 發佈:2022-02-17
參考: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中時也需要定時喂狗,否則會觸發看門狗超時復位!