STM32中異常 中斷 事件辨析

2021-07-08 10:37:23 字數 3581 閱讀 8016

參考:

cortex-m3權威指南(中文)

stm32參考手冊中文版(第10版)

原話

cortex‐m3 在核心水平上搭載了乙個異常響應系統,支援為數眾多的系統異常和外部中斷。

其中,編號為 1-15 的對應系統異常,大於等於 16 的則全是外部中斷

除了個別異常的優先順序被定死外,其它異常的優先順序都是可程式設計的。

所有能打斷正常執行流的事件都稱為異常

異常的概念包含中斷的概念,即中斷是異常的子集

異常與中斷都是硬體支援的。

異常表:

外部中斷表:

這裡的「外部中斷」不是指stm32中的exti中斷,而是所有中斷。

原則上,cm3 支援 3 個固定的高優先順序和多達256級的可程式設計優先順序,並且支援128搶占(preempt)優先順序128亞優先順序。但各廠商會做裁剪。

搶占優先順序即搶占優先順序任務可以打斷正在執行的搶占優先順序任務,而讓cpu轉而執行搶占優先順序任務。

亞優先順序則為多個相同搶占優先順序不同亞優先順序的任務同時請求異常時,cpu會先執行亞優先順序的任務。

搶占優先順序也有稱為「先佔優先順序」。

「亞優先順序」也有會被稱為「響應優先順序」或「子優先順序」。

nvic 中有乙個暫存器是「應用程式中斷及復位控制暫存器」,它裡面有乙個位段名為「優先順序組」。

優先順序組分配:(預設為7位搶占)

中斷優先順序組的配置一般在程式最初設定一次。(中途改變中斷優先順序組本人沒有試過)

當中斷輸入腳被assert(確認有效?)後,該中斷就被懸起。即使後來中斷源取消了中斷請求,已經被標記成懸起的中斷也被記錄下來。到了系統中它的優先順序最高的時候,就會得到響應。

但是,如果在某個中斷得到響應之前,其懸起狀態被清除了(例如,在 primask 或faultmask 置位的時候軟體清除了懸起狀態標誌),則中斷被取消。

當某中斷的服務例程開始執行時,就稱此中斷進入了「活躍」狀態,並且其懸起位會被硬體自動清除。

中斷輸入引腳有效後,中斷就被懸起,即使取消請求,也會執行。

中斷是否處於懸起狀態,中斷請求被響應的關鍵。

中斷響應之前,請求以脈衝方式呈現的話,僅看做一次請求(懸起不被軟體清除的前提下)。

中斷被響應時,硬體清除懸起狀態。

中斷響應中,請求被釋放,但又變為有效時,會再次懸起。

中斷響應完成之後,中斷請求仍然存在,則再次懸起,等待響應。

svc(system service call):系統(服務)呼叫;

svc異常是必須立即得到響應的,若因優先順序不比當前正處理的高,或是其它原因使之無法立即響應,將上訪成硬 fault。

pendsv(pend system service):可懸起系統呼叫。

pendsv 則不同,它是可以像普通的中斷一樣被懸起的。

pendsv 的典型使用場合是在上下文切換時(在不同任務之間切換)。

多用於作業系統軟體開發中。(uc/os-ii中就用pendsv來實現任務排程)

簡單的排程方式:

1. 時間輪轉(systick)

2. 產生乙個系統呼叫(pendsv設定為最低優先順序)

任務 a 呼叫 svc 來請求任務切換(例如,等待某些工作完成)

os 接收到請求,做好上下文切換的準備,並且 pend 乙個 pendsv 異常。

當 cpu 退出 svc 後,它立即進入 pendsv,從而執行上下文切換。

當 pendsv 執行完畢後,將返回到任務 b,同時進入執行緒模式。

發生了乙個中斷,並且中斷服務程式開始執行

在 isr 執行過程中,發生 systick 異常,並且搶占了該 isr。

os 執行必要的操作,然後 pend 起 pendsv 異常以作好上下文切換的準備。

當 systick 退出後,回到先前被搶占的 isr 中,isr 繼續執行

isr 執行完畢並退出後,pendsv 服務例程開始執行,並且在裡面執行上下文切換

當 pendsv 執行完畢後,回到任務 a,同時系統再次進入執行緒模式。

兩個同優先順序中斷交接時,不執行斷點恢復和斷點資料恢復,直接轉到下乙個中斷執行。

圖中:

中斷/事件首先經過邊沿檢測,確認有中斷/事件請求發生,與軟體中斷/事件暫存器相「或」,由請求掛起暫存器記錄當前有中斷/事件請求發生,之後出現分支:

1. 中斷:與中斷遮蔽暫存器相「與」,轉到nvic控制器,由其控制。

2. 事件:與事件遮蔽暫存器相「與」,產生脈衝。

stm32異常 中斷和事件的區別

中斷和異常的區別 中斷是指系統停止當前正在執行的程式轉到其他的服務,可能是程式接收了比自身高優先順序的請求,或者是人為設定中斷,中斷是屬於正常現象。異常是指由於cpu本身故障 程式故障或者請求服務等引起的錯誤,異常屬於不正常現象。cortex m3核心總共支援256個中斷,其中包含16個核心異常和2...

嵌入式中異常 中斷 事件的區別

cortex m3在核心水平上搭載了乙個異常響應系統,支援為數眾多的系統異常和外部中斷。其中,編號1 15的對應系統異常,大於等於16的則都是外部中斷 除了個別異常的優先順序被定死之外,其餘異常的優先順序都是可程式設計的 我們通常把能夠打斷正常執行流的事件稱之為異常 異常的概念中包含了中斷的概念,即...

STM32 中斷與事件

原文 這張圖是一條外部中斷線或外部事件線的示意圖 圖中訊號線上劃有一條斜線 旁邊標誌 19字樣的注釋 表示這樣的線路共有19套 圖中的藍色虛線箭頭 標出了外部中斷訊號的傳輸路徑 首先外部訊號從編號 1的晶元管腳進入 經過編號 2的邊沿檢測電路 通過編號 3的或門進入中斷掛起請求暫存器 最後經過編號 ...