uc os iii學習筆記 中斷管理

2021-07-15 05:26:36 字數 1542 閱讀 3645

中斷:應內部或外部非同步事件的請求中止當前任務,而去處理非同步事件所要求的任務的過程叫做中斷

void usart1_irqhandler(void)

進入中斷服務函式以後使用函式osintenter()

void  osintenter (void)

if (osintnestingctr >= (os_nesting_ctr)250u)

osintnestingctr++;

}

osintnestingctr來記錄中斷巢狀次數,ucosiii最多支援250級的中斷巢狀。退出中斷服務函式時要呼叫函式osintexit()。
uc0s-iii從中斷發布訊號或訊息的處理有兩種模式:直接發布和延時發布。

直接發布

任務a正在執行,外設產生中斷請求,該請求對應的中斷服務程式執行,關閉中斷,中斷服務程式向外發布訊息或者訊號,開啟中斷,任務b正在等待該訊息,任務b收到訊息進入就緒態,任務排程器查詢任務就緒表中優先順序最高的任務,如果沒有比a優先順序更高的任務,就執行任務a,否則轉而執行更高效優先順序的任務。此過程中關中斷來保護發布訊息或者訊號的過程。發布訊息的**放在了中斷級執行

延遲發布

任務a正在執行,外設產生中斷請求,該請求對應的中斷服務程式執行,中斷服務程式將要發布的函式呼叫和相關引數或者訊號或訊息存入「中斷佇列」,關閉中斷,「中斷佇列處理任務」開始執行,將發布函式呼叫和相關引數提取出來,重新開啟中斷,鎖定任務排程器,將發布函式呼叫和相關引數發布出去,掛起自身,解鎖任務排程器。任務排程器查詢任務就緒表中優先順序最高的任務,如果沒有比a優先順序更高的任務,就執行任務a,否則轉而執行更高效優先順序的任務。此過程中關中斷保護的是「中斷佇列處理任務」從「中斷佇列」提取發布函式呼叫資訊的過程,鎖定任務排程器是保護「中斷佇列處理任務」發布函式呼叫資訊的過程。延遲發布巧妙的將發布函式呼叫資訊的**放在了任務級來操作,雖然減少了關中斷時間,但是也延長了任務時間。**注意:中斷佇列處理任務是系統內部任務,任務的優先順序為最高(0);

在系統鎖住排程器的期間,系統依然響應中斷,如果中斷喚醒了的更高優先順序執行緒,排程器並不會立刻執行它,直到呼叫解鎖排程器函式才嘗試進行下一次排程。同中斷鎖一樣把排程器鎖住也能讓當前執行的任務不被換出,直到排程器解鎖。但和中斷鎖有一點不相同的是,對排程器上鎖,系統依然能響應外部中斷,中斷服務例程依然能進行相應的響應。所以在使用排程器上鎖的方式進行任務同步時,需要考慮好任務訪問的臨界資源是否會被中斷服務例程所修改,如果可能會被修改,那麼將不適合採用此種方式進行同步。

排程器鎖能夠方便地使用於一些執行緒與執行緒間同步的場合,由於輕型,它不會對系統中斷響應造成負擔;但它的缺陷也很明顯,就是它不能被用於中斷與執行緒間的同步或通知,並且如果執行排程器鎖的時間過長,會對系統的實時性造成影響(因為使用了排程器鎖後,系統將不再具備優先順序的關係,直到它脫離了排程器鎖的狀態)。

這兩種模式的選擇取決於應用對於中斷響應時間和任務響應時間的要求

ucos iii學習之中斷管理

1.關於中斷管理 中斷響應時間定義為 接收到中斷到開始處理 isr 中 的這段時間。通常,中斷時使用者 的上文 cpu 暫存器 會被放入堆疊。中斷恢復時間定義為 執行完 isr 中最後一句 後到恢復到任務級 的這段時間。任務延遲時間定義為 中斷發生到恢復到任務級 的這段時間。2.cpu的中斷處理 在...

uc os iii學習筆記 任務管理

記了幾篇筆記後發現,基本就是在抄書,而且由於本人繪圖能力有限,也無法貼上圖表去說明,可能導致後來的讀者完全摸不清頭腦,所以再次宣告,本人只是在給自己做知識點筆記,相關圖示和介紹請閱讀書籍 嵌入式實時作業系統us os iii void ostaskcreate os tcb p tcb,cpu ch...

UCOSIII 中斷和時間管理

ucosiii支援中斷巢狀,高優先順序中斷可以打斷低優先順序中斷,在ucosiii中使用osintnestingctr來記錄中斷巢狀次數,最大支援250級巢狀,沒進乙個中盾巢狀osintnestingctr就加1,反之則減1 進入中斷函式 osintenter 僅進行osintnestingctr加...