FreeRTOS中斷優先順序配置(重要)

2021-09-07 07:54:59 字數 1538 閱讀 5946

freertos中斷優先順序配置(重要)

本章節為大家講解freertos中斷優先順序配置,此章節非常重要,初學者經常在這裡犯迷糊。對於初學者來說,本章節務必要整明白。

12.1 nvic

基礎知識

使用freertos時如何配置外設nvic

12.3 freertos

配置選項中nvic相關配置

不受freertos管理中的的深入討論

12.5

總結nvic的全稱是nested vectoredinterrupt controller,即巢狀向量中斷控制器。

對於m3和m4核心的mcu,每個中斷的優先順序都是用暫存器中的8位來設定的。8位的話就可以設定2^8 =256級中斷,實際中用不了這麼多,所以晶元廠商根據自己生產的晶元做出了調整。比如st的stm32f1xx和f4xx只使用了這個8位中的高四位[7:4],低四位取零,這樣2^4=16,只能表示16級中斷巢狀。

對於這個nvic,有個重要的知識點就是優先順序分組,搶占優先順序和子優先順序,下面就以stm32為例進行介紹,stm32f1xx和f4xx都是只使用了這個8位暫存器的高四位[7:4]。

圖12.1 優先順序分組

從上面的**可以看出,stm32支援5種優先順序分組,系統上電復位後,預設使用的是優先順序分組0,也就是沒有搶占式優先順序,只有子優先順序,關於這個搶占優先順序和這個子優先順序有幾點一定要說清楚。

l  具有高搶占式優先順序的中斷可以在具有低搶占式優先順序的中斷服務程式執行過程中被響應,即中斷巢狀,或者說高搶占式優先順序的中斷可以搶占低搶占式優先順序的中斷的執行。

l  在搶占式優先順序相同的情況下,有幾個子優先順序不同的中斷同時到來,那麼高子優先順序的中斷優先被響應。

l  在搶占式優先順序相同的情況下,如果有低子優先順序中斷正在執行,高子優先順序的中斷要等待已被響應的低子優先順序中斷執行結束後才能得到響應,即子優先順序不支援中斷巢狀。

l  reset、nmi、hard fault 優先順序為負數,高於普通中斷優先順序,且優先順序不可配置。

l  對於初學者還有乙個比較糾結的問題就是系統中斷(比如:pendsv,svc,systick)是不是一定比外部中斷(比如spi,usart)要高,答案:不是的,它們是在同乙個nvic下面設定的。

掌握了這些基礎知識基本就夠用了。另外特別注意一點,配置搶占優先順序和子優先順序,他們合併成的4bit數字的數值越小,優先順序越高,這一點千萬不要搞錯了,下面通過12.2小節舉乙個例項。

強烈推薦使用者將cortex-m3核心的stm32f103和cortex-m4核心的stm32f407以及stm32f429的nvic優先順序分組設定為4,即:nvic_prioritygroupconfig(nvic_prioritygroup_4);這樣中斷優先順序的管理將非常方便。這個也是官方強烈建議的。此函式在bsp_init中第乙個被呼叫:

在這裡繼續強調下這一點,在nvic分組為4的情況下,搶占優先順序可配置範圍是0-15,那麼數值越小,搶占優先順序的級別越高,即0代表最高優先順序,15代表最低優先順序。

FreeRTOS優先順序配置說明

1 中斷優先順序和任務優先順序沒有任何關係,中斷的優先順序高於任何任務的優先順序,即任務在執行的過程中,中斷來了就開始執行中斷服務程式。2 中斷優先順序數值越小,優先順序就越高。freertos的任務優先順序是,任務優先順序數值越小,優先順序越低。1 nvic的全稱是nested vectoredi...

FreeRTOS優先順序翻轉

舉例 高優先順序任務的任務函式 void high task void pvparameters 中等優先順序任務的任務函式 void middle task void pvparameters 低優先順序任務的任務函式 void low task void pvparameters xsemaph...

中斷優先順序

中斷優先順序有兩種,一種是搶占優先順序,一種是固有優先順序,先介紹搶占優先順序。中斷搶占優先順序 ip 這個暫存器的每一位,表示對應中斷的搶占優先順序,每一位的復位值都是 0,當我們 把某一位設定為 1 的時候,這一位的優先順序就比其它位的優先順序高了。比如我們設定了 pt0 位為 1 後,當微控制...