FreeRTOS的中断优先级配置小结
NVIC 的全稱是 Nested vectored interrupt controller,即嵌套向量中斷控制器。對于 M3 和 M4 內核的 MCU,每個中斷的優先級都是用寄存器中的 8 位來設置的。 8 位的話就可以
設置 2^8 = 256 級中斷,實際中用不了這么多,所以芯片廠商根據自己生產的芯片做出了調整。比如 ST的 STM32F1xx 和 F4xx 只使用了這個 8 位中的高四位[7:4],低四位取零,這樣 2^4=16,只能表示16級中斷嵌套。NXP的SAMV71(Cotex-M7)只是用了高三位,那么可用的優先級8個,即0~7。
?
搶占式優先級支持嵌套,子優先級不支持嵌套。
?
對于SAME70(Cotex-M7)只使用高3位,可用優先級就是8個,分別是0~7。
FreeRTOS操作系統使用了4~7的優先級,對于0~3的中斷,不受FreeRTOS中斷管理,即FreeRTOS的中斷屏蔽只對4~7優先級的中斷有作用,相應也就有中斷延遲,因為操作系統會有開關中斷進行臨界保護。而0~3優先級的中斷就沒有中斷延遲,可正常使用但是中斷里不可以調用FreeRTOS的API接口。4~7的可以調用但是需要是帶fromISR的API。對于中斷優先級是4的實際對處理器來說就是128(即4<<(8-3))。
?
中斷延遲時間是衡量 RTOS 實時操作系統的一項重要指標,那什么又是中斷延遲呢?從中斷觸發到執行中斷服務程序的第一條指令這段時間就是中斷延遲時間。FreeRTOS 內核源碼中有多處開關全局中斷的地方,這些開關全局中斷會加大中斷延遲時間。比如在源碼的某個地方關閉了全局中斷,但是此時有外部中斷觸發,這個中斷的服務程序就需要等到再次開啟全局中斷后才可以得到執行。開關中斷之間的時間越長,中斷延遲時間就越大,這樣極其影響系統的實時性。如果這是一個緊急的中斷事件,得不到及時執行的話,后果是可想而知的。針對這種情況,FreeRTOS 就專門做了一種新的開關中斷實現機制。關閉中斷時僅關閉受FreeRTOS管理的中斷,不受 FreeRTOS 管理的中斷不關閉,這些不受管理的中斷都是高優先級的中斷,用戶可以在這些中斷里面加入需要實時響應的程序。?FreeRTOS 能夠實現這種功能的奧秘就在于 FreeRTOS 開關中斷使用的是寄存器 basepri,而像 uCOS 這種使用的是 primask,詳情請看下面整理的表格:?
參考文章:
http://www.cnblogs.com/yangguang-it/p/7152549.html
總結
以上是生活随笔為你收集整理的FreeRTOS的中断优先级配置小结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可变参数__VA_ARGS__使用和va
- 下一篇: STM32的启动分析