FreeRTOSConfig 配置文件
基本配置?
?1 configUSE_PREEMPTION?
◆ 配置為 1????:使能搶占式調(diào)度器。?
◆ 配置為 0????:使能合作式調(diào)度器。
2 configUSE_PORT_OPTIMISED_TASK_SELECTION
此配置用于優(yōu)化優(yōu)先級列表中要執(zhí)行的最高優(yōu)先級任務(wù)的算法。對 CM 內(nèi)核的移植文件,默認(rèn)已經(jīng)在文件 portmacro.h 文件中使能。
◆ 通用方式---配置為 0:?
?????所有平臺的移植文件都可以配置為 0,因為這是通用方式。
????純 C 編寫,比專用方式效率低。?
????可用的優(yōu)先級數(shù)量不限制。?
◆ 專用方式---配置為 1:?
????部分平臺支持。?
????這些平臺架構(gòu)有專用的匯編指令,比如 CLZ(Count Leading Zeros)指令,通過這些指令可以 加快算法執(zhí)行速度。?
????比通用方式高效。
????有最大優(yōu)先級數(shù)限制,通常限制為 32 個。
3 configUSE_TICKLESS_IDLE
此配置用于使能 tickless 低功耗模式?
????◆ 配置為 1????:使能 tickless 低功耗模式
????◆ 配置為 0?????:禁能 tickless 低功耗模式
4 configCPU_CLOCK_HZ?
????此參數(shù)用于定義 CPU 的主頻,單位 Hz。
5 configTICK_RATE_HZ?
????此參數(shù)用于定義系統(tǒng)時鐘節(jié)拍數(shù),單位 Hz,一般取 1000Hz 即可。本教程配套的例子也全部采用這 個時鐘節(jié)拍數(shù)。過高的的系統(tǒng)時鐘節(jié)拍將使得 FreeRTOS 內(nèi)核運行占用過多的時間,增加系統(tǒng)負(fù)荷。
6 configMAX_PRIORITIES
????此參數(shù)用于定義可供用戶使用的最大優(yōu)先級數(shù),如果這個定義的是 5,那么用戶可以使用的優(yōu)先級號 是 0,1,2,3,4,不包含 5。
7 configMINIMAL_STACK_SIZE?
????此參數(shù)用于定義空閑任務(wù)的??臻g大小,單位字,即 4 字節(jié)。
8 configTOTAL_HEAP_SIZE?
????定義堆大小,F(xiàn)reeRTOS 內(nèi)核,用戶動態(tài)內(nèi)存申請,任務(wù)棧,任務(wù)創(chuàng)建,信號量創(chuàng)建,消息隊列創(chuàng)建 等都需要用這個空間。
9 configMAX_TASK_NAME_LEN?
????定義任務(wù)名最大的字符數(shù),末尾的結(jié)束符 '\0'也要計算在內(nèi)
10 configUSE_16_BIT_TICKS?
????系統(tǒng)時鐘節(jié)拍計數(shù)使用 TickType_t 數(shù)據(jù)類型定義的。
????如果用戶使能了宏定義 configUSE_16_BIT_TICKS,那么 TickType_t 定義的就是 16 位無符號數(shù),如 果沒有使能,那么 TickType_t 定義的就是 32 位無符號數(shù)。對于 32 位架構(gòu)的處理器,一定要禁止此宏定 義,即設(shè)置此宏定義數(shù)值為 0 即可。而 16 位無符號數(shù)類型主要用于 8 位和 16 位架構(gòu)的處理器。
11 configIDLE_SHOULD_YIELD?
????此參數(shù)用于使能與空閑任務(wù)同優(yōu)先級的任務(wù),只有滿足以下兩個條件時,此參數(shù)才有效果: 1. 使能搶占式調(diào)度器。
2. 有創(chuàng)建與空閑任務(wù)同優(yōu)先級的任務(wù)。?
????配置為 1,就可以使能此特性了,實際應(yīng)用中不建議用戶使用此功能,將其配置為 0 即可。
12 configUSE_TASK_NOTIFICATIONS?
????◆ 配置為 1????:?使能任務(wù)間直接的消息傳遞,包含信號量,事件標(biāo)志組和消息郵箱。
????◆ 配置為 0?????:禁能此特性。
13 configUSE_MUTEXES
????◆ 配置為 1????:使能互斥信號量?
????◆ 配置為 0????:禁能互斥信號量
14 configUSE_RECURSIVE_MUTEXES?
????◆ 配置為 1 ????:使能遞歸互斥信號量?
????◆ 配置為 0 ????:禁能遞歸互斥信號量
15 configUSE_COUNTING_SEMAPHORES
????◆ 配置為 1 ???:使能計數(shù)信號量?
????◆ 配置為 0????: 禁能計數(shù)信號量
16 configUSE_ALTERNATIVE_API?
????此配置將在以后的版本中被刪除,建議用戶不要再使用。
17 configQUEUE_REGISTRY_SIZE?
通過此定義來設(shè)置可以注冊的信號量和消息隊列個數(shù)。
隊列注冊有兩個目的,這兩個目的都與內(nèi)核調(diào)試有關(guān):
????◆ 注冊隊列的時候,可以給隊列起一個名字,當(dāng)使用調(diào)試組件的時候,通過名字可以很容易的區(qū)分不同 隊列。
????◆ 通過隊列的相關(guān)信息,調(diào)試器可以很容易定位隊列和信號量,能夠定位信號量是因為 FreeRTOS 信號 量也是基于隊列實現(xiàn)的。 當(dāng)然,如果用戶沒有使用內(nèi)核方面的調(diào)試器,這個宏定義是沒有意義的。
18 configUSE_QUEUE_SETS?
????◆ 配置為 1????:使能消息隊列。?
????◆ 配置為 0????: 禁能消息隊列。
19 configUSE_TIME_SLICING?
????◆ 配置為 1????:使能時間片調(diào)度。?
????◆ 配置為 0 ???:禁能時間片調(diào)度。?
????◆ 用戶沒有配置此選項?
???如果用戶沒有配置此選項,默認(rèn)在 FreeRTOS.h 文件中已經(jīng)配置為 1,即使能時間片調(diào)度。
20 configUSE_NEWLIB_REENTRANT?
????◆ 配置為 1????:每個任務(wù)創(chuàng)建的時候?qū)⒎峙?Newlib 的重入結(jié)構(gòu)體。
????◆ 配置為 0????: 禁止此特性。
21 configENABLE_BACKWARD_COMPATIBILITY?
????◆ 配置為 1????:使能新版本對老版本的兼容特性,即向后兼容或者說向下兼容。?
????◆ 配置為 0????:禁止此特性。
22 configNUM_THREAD_LOCAL_STORAGE_POINTERS?
此配置用于定義線程局部指針變量的個數(shù)。
鉤子函數(shù)配置:
1 configUSE_IDLE_HOOK?
????◆ 配置為 1????:使能空閑任務(wù)的鉤子函數(shù)?
????◆ 配置為 0????:禁能空閑任務(wù)鉤子函數(shù)
2 configUSE_MALLOC_FAILED_HOOK?
????當(dāng)創(chuàng)建任務(wù),信號量或者消息隊列時,F(xiàn)reeRTOS 通過函數(shù) pvPortMalloc()申請動態(tài)內(nèi)存。
???? ◆ 配置為 1????:使能動態(tài)內(nèi)存申請失敗時的鉤子函數(shù)
???? ◆ 配置為 0????:禁能動態(tài)內(nèi)存申請失敗時的鉤子函數(shù)
3 configUSE_TICK_HOOK
???? ◆ 配置為 1???:使能滴答定時器中斷里面執(zhí)行的鉤子函數(shù)?
????◆ 配置為 0????:禁能滴答定時器中斷里面執(zhí)行的鉤子函數(shù)
4 configCHECK_FOR_STACK_OVERFLOW?
FreeRTOS 的棧溢出檢測支持兩種方法,稱之為方法一和方法二。?
????◆ 配置為 2????:棧溢出檢測使用方法二
????◆ 配置為 1????:棧溢出檢測使用方法一
????◆ 配置為 0????:禁止棧溢出檢測
任務(wù)運行信息獲取配置:
1 configGENERATE_RUN_TIME_STATS?
????◆ 配置為 1????:使能任務(wù)運行狀態(tài)參數(shù)統(tǒng)計。?
????◆ 配置為 0 ???:禁止此特性。
2?configUSE_TRACE_FACILITY?
????◆ 配置為 1????:使能此配置將添加額外的結(jié)構(gòu)體成員和函數(shù),以此來協(xié)助可視化和跟蹤,
在使用 IAR 中的 FreeRTOS 插件時要使能這個配置,否則無法顯示任務(wù)棧的使用情況。
???? ◆ 配置為 0????: 禁能此特性。
3 configUSE_STATS_FORMATTING_FUNCTIONS
????用戶配置宏定義?configUSE_TRACE_FACILITY 和 configUSE_STATS_FORMATTING_FUNCTIONS 都為 1 的時候,
????將使能函數(shù) vTaskList() 和 vTaskGetRunTimeStats(),如果兩者中任何一個為 0,那么 這兩個函數(shù)都將被禁能。
合作式任務(wù)配置
1 configUSE_CO_ROUTINES?
????◆ 配置為 1????:使能合作式調(diào)度相關(guān)函數(shù)。
????◆ 配置為 0 ???:禁能合作式調(diào)度相關(guān)函數(shù)。?
2 configMAX_CO_ROUTINE_PRIORITIES?
????此參數(shù)用于定義可供用戶使用的最大的合作式任務(wù)優(yōu)先級數(shù),如果這個定義的是 5,那么用戶可以使 用的優(yōu)先級號是 0,1,2,3,4,不包含 5
軟件定時器配置
1 configUSE_TIMERS?
????◆ 配置為 1????:使能軟件定時器。?
????◆ 配置為 0????:禁能軟件定時器。
?2 configTIMER_TASK_PRIORITY?
????配置軟件定時器任務(wù)的優(yōu)先級。
3 configTIMER_QUEUE_LENGTH?
????配置軟件定時器命令隊列的長度。
4 configTIMER_TASK_STACK_DEPTH?
????配置軟件定時器任務(wù)的棧空間大小。
斷言配置
????FreeRTOS 中的斷言函數(shù) configASSERT()和標(biāo)準(zhǔn) C 中的斷言函數(shù) assert()是一樣的,如果斷言函數(shù)的?參數(shù)為 0 時將觸發(fā)斷言函數(shù)的執(zhí)行。
?????FreeRTOS 的斷言功能在調(diào)試階段是非常有用的,可以有效地檢查參數(shù)錯誤和運行中的錯誤,但在正式發(fā)布軟件時,請將此功能關(guān)閉,因為斷言功能會增加工程代碼大小并降低工程執(zhí)行效率。關(guān)閉斷言也比較簡單,如果 FreeRTOSConfig.h 文件中有斷言的宏定義,將其注釋掉即可,如果沒有宏定義,默認(rèn)在?FreeRTOS.h 文件中就是關(guān)閉的。
? ? 可以采用如下的斷言方法:
????在使用調(diào)試器的情況下,一旦出現(xiàn)斷言失敗,會關(guān)閉中斷,程序會死在這個 for 循環(huán)中,此時用戶可以很?容易就鎖定函數(shù)出錯位置。?當(dāng)然,采用下面這種方法也是可以的:
????
????其中關(guān)鍵字 __LINE__ 表示源代碼行號,關(guān)鍵字__FILE__表示源代碼文件名。
????用戶可以自行測試下這個函?數(shù) vAssertCalled,在這個函數(shù)里面調(diào)用一下串口打印之類的功能,將出現(xiàn)錯誤的源文件和代碼行號打印?出來。這種方法也可以很方便的鎖定出錯的位置。?調(diào)試階段出現(xiàn)斷言失敗的情況下,不限制以上兩種處理方法,用戶采用適合自己的方法即可。
函數(shù) Include 配置
函數(shù) Include 配置主要是指用戶可以根據(jù)需要使能或者禁止在工程中使用相應(yīng)的函數(shù),
配置為 1,表示使能,即可以在工程中使用相應(yīng)函數(shù)。
配置為 0,表示禁止,即禁止在工程中使用相應(yīng)函數(shù)??梢赃@樣設(shè)置的函數(shù)主要有如下幾種:
對于配置 1,但用戶在工程中沒有用到的函數(shù),編譯器一般都會把這些冗余函數(shù)刪掉,不會添加到最終的 hex 文件中。