嵌入式作業系統進入臨界區是否影響中斷的接受?

2021-10-01 13:22:44 字數 888 閱讀 2237

在ucos,freertos中常常會有進入臨界區,以保證當前的操作不可被打斷,確保操作關鍵**的安全。

進入臨界區

關鍵**操作

假設發生a型別中斷

退出臨界區

那麼a中斷還能夠接受到嗎?

進入臨界區,關閉中斷,中斷發生,開啟中斷,這個過程中會發生什麼呢?

顯然,關閉中斷期間,cpu不可能去響應中斷,再次開啟中斷的時候,如果在關閉中斷期間,發生了中斷,發生的中斷被記錄下來,開啟中斷時候,中斷控制器會再次響應這些被記錄的中斷。

stm32在使用時有時需要禁用全域性中斷,比如mcu在公升級過程中需禁用外部中斷,防止公升級過程中外部中斷觸發導致公升級失敗。

arm mdk中提供了如下兩個介面來禁用和開啟總中斷:

__disable_irq();   // 關閉總中斷

__enable_irq();    // 開啟總中斷

但測試發現這樣乙個問題,在關閉總中斷後,如果有中斷觸發,雖然此時不會引發中斷,但在呼叫__enable_irq()開啟總中斷後,mcu會立即處理之前觸發的中斷。這說明__disable_irq()只是禁止cpu去響應中斷,沒有真正的去遮蔽中斷的觸發,中斷發生後,相應的暫存器會將中斷標誌置位,在__enable_irq()開啟中斷後,由於相應的中斷標誌沒有清空,因而還會觸發中斷。所以要想禁止所有中斷,必須對逐個模組的中斷進行disable操作,由於每個模組中斷源有很多,對逐個中斷disable的話比較複雜,較為簡單的方法是通過***_clearitpendingbit()清除中斷標誌或者直接通過***_deinit()來清除暫存器的狀態。這樣在__enable_irq()開啟總中斷後,mcu就不會響應之前觸發的中斷了。

引用@

嵌入式作業系統概述

實時作業系統 rtos 設計成提供乙個對真實世界的事件的及時響應 timely response 出現在真實世界中的事件可能有乙個時間限制 deadline 在此期限之前,實時 嵌入式系統必須確保在有限時間內對此事件做出相應的響應。根據相應事件的時間限制,嵌入式實時作業系統可以分為兩類 1 硬實時嵌...

嵌入式作業系統簡介

嵌入式作業系統簡介 商用型系統 vxworks 半開源 wince 半開源 免費型 linux ucosii 只適用於控制,不適合遠端,不自帶網路協議棧 linux模仿unix unix是在於1969年在at t的貝爾實驗室開發 備註 丹尼斯.里奇 unix之父 c語言之父 gpl協議 gpl同其它...

嵌入式作業系統uCOSII

2.4 常用資料結構 2.4.1 程式控制塊 本質上是結構體 typedef struct tbctcb 2.4.2 控制塊的組織 鍊錶 typedef struct tcbtcb 位圖!3 ucossii中的任務 任務組成 任務程式 函式 任務堆疊和任務控制塊 具有私有空間的任務叫做程序,沒有私有...