msp和psp 的含義是main_stack_pointer 和process_stack_pointer,在邏輯位址上他們都是r13;
這意味著同乙個邏輯位址,實際上有兩個物理暫存器,乙個為msp,乙個為psp,在不同的工作模式呼叫不同的物理暫存器。
cortex-m3核心有兩個堆疊指標:msp-主堆疊指標和psp-程序堆疊指標,在任何乙個時刻只能有乙個堆疊指標起作用,也就是說任何乙個時刻只能使用乙個堆疊指標,要麼使用msp,要麼使用psp。何為堆疊指標,其實就是普通的指標,只是他們指向兩個不同的堆疊。
msp:主堆疊指標,當程式復位後(開始執行後),一直到第一次任務切換完成前,使用的都是msp,即:main函式執行時用的是msp,執行osstarthighrdy,執行pendsv程式,用的都是msp。當main函式開始執行前,啟動檔案會給這個函式分配乙個堆疊空間,像ucos給任務分配堆疊空間一樣,用於儲存main函式執行過程中變數的儲存。此時msp就指向了該堆疊的首位址。
psp:程序堆疊指標,切換任務之後pendsv服務程式中有orr lr, lr, #0x04這句,意思就是pendsv中斷返回後使用的psp指標,此時psp已經指向了所執行任務的堆疊,所以返回後就可以就接著該任務繼續執行下去了。
由於任何乙個時刻都只能使用乙個堆疊指標(sp),所以,如果在某乙個時刻,需要讀取或者改變另外乙個堆疊指標的內容就得使用特定的指令:msr和mrs
參考:
Cortex M3雙堆疊MSP和PSP
什麼是棧?在談m3堆疊之前我們先回憶一下資料結構中的棧。棧是一種先進後出的資料結構 類似於槍枝的彈夾,先放入的子彈最後打出,後放入的子彈先打出 m3核心的堆疊也不例外,也是先進後出的。棧的作用?區域性變數記憶體的開銷,函式的呼叫都離不開棧。了解了棧的概念和基本作用後我們來看m3的雙堆疊 cortex...
用雙指標實現PLC堆疊設計
關鍵技術 plc 堆疊 關鍵演算法 指標 某基地在設計mes現場排程模組時,架構了乙個部署在車間現場的it plc,作為mes與me plc通訊的中間介質,用於處理握手訊號並快取業務資料。此排程模組要實現以下業務資料的快取 訂單快取 過站記錄快取 在製品佇列快取。其中訂單快取用於上線,過站記錄快取用...
堆疊記憶體和指標
首先,堆疊都是記憶體。棧是記憶體上面的,先進後出。堆是記憶體上面的,先進先出。堆疊和記憶體的關聯 乙個32位程式,那麼32位位址只能表示4g的空間。那麼棧就只有4g,而堆就有你的實際記憶體大小。這句話是錯的,正確的是,棧 堆 全域性靜態區 4g 注意 電腦核心使用2g,自己則只能使用最大2g,而執行...