棧空間做爲一種存儲器使用機制,是「先入先出」的結構,在系統空間中用做臨時數據的存儲。棧空間操做的關鍵之一爲棧指針寄存器,每次執行棧操做時,棧指針的內容會自動移動。在M0處理器中,棧指針爲R13(SP),並且物理上存在兩個棧指針,MSP,PSP,但每次只會使用一個,由CONTROL寄存器以及處理器的運行狀態決定。架構
向棧中存入數據叫「壓棧」(使用PUSH指令),回覆數據叫「出棧」(使用POP指令)。根據架構不一樣,有些處理器壓棧後地址增長,有些地址減少。Cortex-M0操做基於「滿遞減」的棧模型,意味着棧指針始終指向棧空間最後一個數據,在執行存儲數據PUSH前,棧指針先減少。函數
PUSH和POP一般用在函數或子程序的開始和結尾處。在函數開始執行時,PUSH操做將寄存器的當前內容存入棧,執行結束前,POP又將棧空間的數據恢復。通常來講執行PUSH操做也要執行POP操做,不然恢復的數據可能沒法對應以前的寄存器,這樣致使沒法預測的結果,好比棧溢出。ui
棧操做的最小單位是4字節(32位),Cortex-M0的棧空間被設計位字對齊,地址必須是4的整數倍。因爲這個緣由,棧指針的最低兩位BITS[1:0]在硬件上被置爲0,所以讀書也爲0.spa
MSP用於普通程序,在由操做系統時,內核使用主棧指針MSP,用戶使用進程棧指針PSP。操作系統
MSP的初始化位於程序空間的開頭部分,PSP沒有進行初始化定義,它須要經過軟件初始化。 設計