Cortex-M3内核中的异常
文章目錄
- 1 Cortex-M3內核中的異常
- 2 PendSV異常
- 3 異常處理
- 3.1 異常處理流程
- 3.2 EXC_RETURN
1 Cortex-M3內核中的異常
系統異常列表:
2 PendSV異常
PendSVC異常用來實現任務的切換。 在一般的RTOS設計中,在執行具體的任務切換時,是通過向PendSVC異常發起請求,然后在PendSVC異常處理程序中具體執行任務切換的操作。
在PendSV中執行RTSO上下文切換(即不同任務間切換)。工作原理:配置為最低優先級,上下文切換的請求將自動延遲到其它的ISR都完成后才處理,并且可被其它異常/中斷搶占。
3 異常處理
3.1 異常處理流程
進入異常:
剛進入異常時,硬件自動會將以下寄存器壓入當前堆棧(當前使用的堆棧是MSP就壓入MSP中,使用的是PSP就壓入PSP中)。之后硬件自動跳轉到PendSVC異常處理程序中運行。
退出異常:
退出異常時,硬件會自動出棧,這個次序與進入異常時壓棧的順序剛好相反。可以理解為進入異常時保存了部分寄存器狀態,退出時正好恢復。此外,在退出異常時,還會用到EXC_RETURN,RTSO中只用到了0xFFFF_FFFD(即返回異常時進入線程模式,使用PSP堆棧)。
步驟如下:
注意:在返回時,會根據EXC_RETURN的值來決定返回動作。
3.2 EXC_RETURN
EXC_RETURN是用于程序從異常中斷中返回的。
根據Cortex-M3的異常處理流程,當發生異常時,CPU先將核心寄存器壓入當前堆棧(如果當前是線程模式,則壓入PSP堆棧,如果當前是Handler模式,則壓入MSP堆棧),然后CPU會將LR設置為一個特殊的值,比如0xFFFFFFFD,然后切換到Handler模式,切換成MSP堆棧,最后進入異常處理例程(異常處理例程總是使用MSP堆棧)。在異常處理例程完成后需要從中斷返回時,就將LR的值載入到PC中(通常是BX LR指令,也可以是MOV PC,LR指令,或者POP {…, PC}等指令,只要能將LR賦給PC即可),由于LR的值是0xFFFFFFFD,CPU檢測到向PC中載入的是這個特殊值時,就知道是中斷返回,于是做中斷返回的動作(與壓入動作相反:從堆棧中彈出核心寄存器的值,恢復到線程模式或Handler模式等)。
這里這個特殊的值(0xFFFFFFFD)就是EXC_RETURN,它的特點是高28位全部是1,只有低4位可變化,不同的低4位表示不同的中斷返回動作。
參考資料:
總結
以上是生活随笔為你收集整理的Cortex-M3内核中的异常的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最低还款额影响信用吗
- 下一篇: 银宝山新股票怎么样 接连涨停的原因