【雙堆棧指針(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。
參考摘錄:
《Cortex-M內核系列和STM32-講座2教程.pdf》
《ARM Cortex-M3權威指南.pdf》