《Cortex-M0權威指南》之體系結構---??臻g操作
??臻g作為一種存儲器使用機制,是“先入先出”的結構,在系統空間中用作臨時(shí)數據的存儲。??臻g操作的關(guān)鍵之一為棧指針寄存器,每次執行棧操作時(shí),棧指針的內容會(huì )自動(dòng)移動(dòng)。在M0處理器中,棧指針為R13(SP),而且物理上存在兩個(gè)棧指針,MSP,PSP,但每次只會(huì )使用一個(gè),由CONTROL寄存器以及處理器的運行狀態(tài)決定。
本文引用地址:http://dyxdggzs.com/article/201612/342066.htm
向棧中存入數據叫“壓?!?使用PUSH指令),回復數據叫“出?!?使用POP指令)。根據架構不同,有些處理器壓棧后地址增加,有些地址減小。Cortex-M0操作基于“滿(mǎn)遞減”的棧模型,意味著(zhù)棧指針始終指向??臻g最后一個(gè)數據,在執行存儲數據PUSH前,棧指針先減小。
PUSH和POP通常用在函數或子程序的開(kāi)始和結尾處。在函數開(kāi)始執行時(shí),PUSH操作將寄存器的當前內容存入棧,執行結束前,POP又將??臻g的數據恢復。一般來(lái)說(shuō)執行PUSH操作也要執行POP操作,否則恢復的數據可能無(wú)法對應之前的寄存器,這樣導致無(wú)法預測的結果,比如棧溢出。

棧操作的最小單位是4字節(32位),Cortex-M0的??臻g被設計位字對齊,地址必須是4的整數倍。由于這個(gè)原因,棧指針的最低兩位BITS[1:0]在硬件上被置為0,因此讀書(shū)也為0.
MSP用于普通程序,在由操作系統時(shí),內核使用主棧指針MSP,用戶(hù)使用進(jìn)程棧指針PSP。
MSP的初始化位于程序空間的開(kāi)頭部分,PSP沒(méi)有進(jìn)行初始化定義,它需要通過(guò)軟件初始化。
評論