2017-08-02 130 views
1

Cortex M3處理器有兩個堆棧指針:PSP,MSP。 在一些複雜的應用程序中,用戶程序使用PSP指向用戶程序堆棧。異常處理程序使用指向主堆棧的MSP。從Cortex M3處理器的用戶程序進入中斷處理程序時使用哪個堆棧?

問題是: 用戶程序運行時發生中斷。在進入中斷處理程序之前,R0-R3,R12,LR,PC和xPSR寄存器將被壓入堆棧。但是,哪個堆棧用於存儲這些寄存器?

+0

有時他們有兩個堆棧指針,不能確定在m3上,但有些cortex-ms是編譯時選項。而使用第二個堆棧指針是最痛苦的,除非你正在專門嘗試使用它,否則你將共享一個堆棧。微不足道的看你是否在處理程序中複製/轉儲堆棧然後檢查它... –

+0

Os使用主堆棧,用戶程序使用程序堆棧。一些簡單的應用程序將只使用MSP(主棧)。 –

+0

堆棧指針SP指向SP_main和SP_process。當前堆棧取決於模式,在線程模式下,CONTROL.SPSEL位的值爲 ,請參閱第B1-575頁的專用CONTROL寄存器。重置 選擇並初始化SP_main,請參閱第B1-586頁上的重置行爲。 –

回答

4

根據我對ARM文檔(Cortex-M3設備通用用戶指南)的瞭解,異常輸入時的寄存器堆棧發生在當前的堆棧上,然後處理器進入處理器模式。如果你仔細想想,這對於普通情況來說是最方便的行爲。

+0

因此,當處理器從用戶程序進入異常處理程序時,它將編程堆棧。在異常處理程序結束時,它將彈出程序堆棧並返回到線程模式。 –

+0

同樣,如果您閱讀文檔,處理器會將EXC_RETURN值存儲到鏈接寄存器(LR),並使用該值來了解異常處理何時結束以及處理器模式繼續執行。所以在從線程模式中取出一個異常的情況下,在正常情況下,異常返回將使您回到線程模式,並使用線程模式堆棧指針來恢復寄存器。請注意,操作系統任務隱含的操作系統和上下文切換可以更改此順序以滿足他們的需求。 –

相關問題