1、中斷優先順序和任務優先順序沒有任何關係,中斷的優先順序高於任何任務的優先順序,即任務在執行的過程中,中斷來了就開始執行中斷服務程式。1、nvic的全稱是nested vectoredinterrupt controller,即巢狀向量中斷控制器。2、中斷優先順序數值越小,優先順序就越高。freertos的任務優先順序是,任務優先順序數值越小,優先順序越低。
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。isr專用函式名2、建議使用者配置configmax_priorities 的最大值不要超過32,使用者可以使用的範圍0-31。數值越大優先順序越高。
根據實際應用配置,配置越大,需要的記憶體空間越大。
3、freertos
排程器確保處於就緒態或執行態的高優先順序的任務獲取處理器使用權,換句話說就是處於就緒態的最高優先
級的任務才會執行。
當巨集 configuse_time_slicing
定義為
1 的時 候多個任務可以共用乙個優先順序,數量不限。預設情況下巨集
configuse_time_slicing
在檔案 freertos.h 中已經定義為
1。此時處於就緒態的優先順序相同的任務就會使用時間片輪
轉排程器 獲取執行時間。
常規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相關配置 不受...