STM32優先順序分組,搶占優先順序與響應優先順序詳解

2021-09-19 06:13:00 字數 1164 閱讀 4555

nvic(nested vectored interrupt controller) 巢狀向量中斷控制器

一.優先順序分組

//對中斷源進行分組,每組有乙個搶占優先順序和響應優先順序。

上面的理解是錯誤的,事實上,所有中斷源都是乙個組。

這個操作應該稱之為設定中斷優先順序的控制模式(控制組別)。

清楚地說是:這裡不應該用「組」這個詞,實際上就是設定中斷優先順序的控制方式。

共有方式0~方式4。每種方式中,搶占優先順序和響應優先順序各自所用的位數是不一樣的

優先順序的數值越小,優先順序越高

二.搶占優先順序與響應優先順序

搶斷優先順序》響應優先順序=子優先順序;也是說,當中斷的搶占優先順序不同的時候,不用管他們的響應優先順序

如果中斷a的搶占優先順序》b的搶占優先順序

那麼當同時有ab的中斷請求的時候,會先響應a;當b的中斷服務程式正在執行而a產生了中斷請求,則會在b的中斷服務程式 中巢狀a的中斷服務程式

如果a的搶占優先順序》b的搶占優先順序=c的搶占優先順序》d的搶占優先順序

,d的響應優先順序》c的響應優先順序》b的響應優先順序》a的響應優先順序

那麼比如現在正在執行a的中斷服務程式;b和c和d都產生了中斷服務請求,但是都不能打斷a;

至於a執行完之後先執行誰的中斷服務程式,首先是要考慮bcd的搶占優先順序,搶占優先順序b=c>d,因此再考慮響應優先順序c>b,因此a執行完之後執行c;

雖然此處d的響應優先順序最大,而且此處是考慮響應而非搶占,但是還是要優先考慮搶占優先順序

因此將響應優先順序稱為子優先順序更加合適,而且事實上程式裡的變數也是這麼命名的

nvic_initstructure.nvic_irqchannelpreemptionpriority = 0;    //搶占優先順序    

nvic_initstructure.nvic_irqchannelsubpriority = 1;           //子優先順序

因此上述整個執行過程是a執行完之後執行c,然後再b,然後在d

通常情況下中斷同時發生一般是不太可能的,因此考慮響應的先後一般是在上述情況中,即在等待乙個搶占優先順序更高的中斷執行完,在這前給後面要執行的中斷排個隊;

STM32的搶占優先順序和響應優先順序

野火 零死角玩轉stm32 一 搶占優先順序和響應優先順序 stm32 的中斷向量具有兩個屬性,乙個為搶占屬性,另乙個為響應屬性,其屬性編號 越小,表明它的優先級別越高。搶占,是指打斷其他中斷的屬性,即因為具有這個屬性會出現巢狀中斷 在執行中斷 服務函式a 的過程中被中斷b 打斷,執行完中斷服務函式...

stm32NVIC搶占優先順序

在配置優先順序的時候,還要注意乙個很重要的問題,即中斷種類的數量。nvic 只可 以配置16 種中斷向量的優先順序,也就是說,搶占優先順序和響應優先順序的數量由乙個4 位的 數字來決定,把這個4 位數字的位數分配成搶占優先順序部分和響應優先順序部分。有5 組分 配方式 第0 組 所有4 位用來配置響...

STM32的 NVIC中斷優先順序分組

cm3 核心支援 256 個中斷,其中包含了 16 個核心中斷和 240 個外部中斷,並且具有 256 級的可程式設計中斷設定。stm32 並沒有使用 cm3 核心的全部東西,而是只用了它的一部分。stm32 有 84 個中斷,包括 16 個核心中斷和 68 個可遮蔽中斷,具有 16 級可程式設計的...