FreeRTOS優先順序配置說明

2021-09-29 18:28:21 字數 3899 閱讀 6109

1、中斷優先順序和任務優先順序沒有任何關係,中斷的優先順序高於任何任務的優先順序,即任務在執行的過程中,中斷來了就開始執行中斷服務程式。

2、中斷優先順序數值越小,優先順序就越高。freertos的任務優先順序是,任務優先順序數值越小,優先順序越低。

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

2、對於m3和m4核心的mcu,每個中斷的優先順序都是用暫存器中的8位來設定的。8位的話就可以設定2^8 =256級中斷,實

際中用不了這麼多,所以晶元廠商根據自己生產的晶元做出了調整。比如st的stm32f1xx和f4xx只使用了這個8位中的高

四位[7:4],低四位取零,這樣2^4=16,只能表示16級中斷巢狀。

從上面的**可以看出,stm32支援5種優先順序分組,系統上電復位後,預設使用的是優先順序分組0,也就是沒有搶占式

優先順序,只有子優先順序。為了更方便管理中斷優先順序,st官方建議並且預設使用第5分組:nvic_prioritygroup_4,即只有

搶占優先順序,優先順序為0-15級,數值越大優先順序越低。

freertos中斷配置巨集

此巨集用來設定

mcu

使用幾位優先順序,

stm32

使用的是

4 位,因此此巨集為 4!

此巨集是用來設定最低優先順序,前面說了,

stm32

優先順序使用了

4 位,而且

stm32

配置的 使用組4

,也就是

4 位都是

搶占優先順序。因此優先級數就是

16 個,最低優先順序那就是

15。所以 此巨集就是 15。

此巨集用來設定

freertos

系統可管理的最大優先順序。

這裡設定為 

5,也就是高於 5

的優先順序

(優先級數小於

5)不歸

freertos

管理!

此巨集用來設定核心中斷優先順序(用來設定

pendsv

和滴答定時器的中斷優先順序)。

左移 8-configprio_bits 位,也就是左移 4 位。為什麼要左移 4

位呢?因為

stm32

使用了4

位作為優先順序,而這4位

是高4位,因此要左移4位才是真正的優先順序,也可以直接巨集定義為0xf0,但是不直觀。

左移 4 位的原因與之前一致。

此巨集設定好以後,低於此優先順序(

優先級數大於

5)的中斷可以安全的呼叫 freertos 的

api 函式,高於此優先順序(優先

級數小於

5)的中斷 freertos

是不能禁止的,中斷服務函式也不能呼叫 freertos 的 api

函式!

1、使用者實際可以使用的優先順序範圍是0- configmax_priorities -1。

2、建議使用者配置configmax_priorities 的最大值不要超過32,使用者可以使用的範圍0-31。數值越大優先順序越高。

根據實際應用配置,配置越大,需要的記憶體空間越大。

3、freertos

排程器確保處於就緒態或執行態的高優先順序的任務獲取處理器使用權,換句話說就是處於就緒態的最高優先

級的任務才會執行。

當巨集 configuse_time_slicing

定義為

1 的時 候多個任務可以共用乙個優先順序,數量不限。預設情況下巨集

configuse_time_slicing

在檔案 freertos.h 中已經定義為

1。此時處於就緒態的優先順序相同的任務就會使用時間片輪

轉排程器 獲取執行時間。

isr專用函式名

常規api對應

其它特性

xtaskgettickcountfromisr

xtaskgettickcount

xtasknotifyfromisr

xtasknotify

附加引數

xtasknotifyandqueryfromisr

xtasknotifyandquery

附加引數

vtasknotifygivefromisr

xtasknotifygive

附加引數

xtaskresumefromisr

vtaskresume

返回值xqueueisqueueemptyfromisr

---xqueueisqueuefullfromisr

---uxqueuemessageswaitingfromisr

uxqueuemessageswaiting

xqueueoverwritefromisr

xqueueoverwrite

附加引數

xqueuepeekfromisr

xqueuepeek

取消等待

xqueuereceivefromisr

xqueuereceive

附加引數,取消等待

xqueueselectfromsetfromisr

xqueueselectfromset

取消等待

xqueuesendfromisr

xqueuesend

附加引數,取消等待

xqueuesendtobackfromisr

xqueuesendtoback

附加引數

xqueuesendtofrontfromisr

xqueuesendtofront

附加引數

xsemaphoregivefromisr

xsemaphoregive

附加引數

xsemaphoretakefromisr

xsemaphoretake

附加引數,取消等待

xtimerchangeperiodfromisr

xtimerchangeperiod

附加引數,取消等待

xtimerpendfunctioncallfromisr

xtimerpendfunctioncall

附加引數,取消等待

xtimerresetfromisr

xtimerreset

附加引數,取消等待

xtimerstartfromisr

xtimerstart

附加引數,取消等待

xtimerstopfromisr

xtimerstop

附加引數,取消等待

xeventgroupclearbitsfromisr

xeventgroupclearbits

daemon task中執行

xeventgroupgetbitsfromisr

xeventgroupgetbits

daemon task中執行

xeventgroupsetbitsfromisr

xeventgroupsetbits

附加引數,daemon task中執行

FreeRTOS 任務優先順序說明

freertos任務優先順序與unix程序優先順序不同 freertos 任務優先 任務優先順序數值越小,任務優先順序越低。unix 任務優先 程序優先順序數值越小,程序優先順序越高。下面對 freertos 優先順序相關的幾個重要知識點進行下說明,這些知識點在以後的使用中務必要掌握牢固。freer...

FreeRTOS任務優先順序說明

下面對 freertos 優先順序相關的幾個重要知識點進行下說明,這些知識點在以後的使用中務必要掌握牢固。freertos 中任務的最高優先順序是通過 freertosconfig.h 檔案中的 configmax priorities 進行 配置的,使用者實際可以使用的優先順序範圍是 0 到 co...

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

freertos中斷優先順序配置 重要 本章節為大家講解freertos中斷優先順序配置,此章節非常重要,初學者經常在這裡犯迷糊。對於初學者來說,本章節務必要整明白。12.1 nvic 基礎知識 使用freertos時如何配置外設nvic 12.3 freertos 配置選項中nvic相關配置 不受...