但當(dāng)任務(wù)的優(yōu)先級與idle任務(wù)相同時情況就有些不同了。當(dāng)configIDLE_SHOULD_YIELD 被配置為1時,當(dāng)任何優(yōu)先級與idle 任務(wù)相同的任務(wù)處于就緒態(tài)時,idle任務(wù)會立刻要求調(diào)度器進(jìn)行任務(wù)切換。這會使idle任務(wù)占用最少的CPU時間,但同時會使得優(yōu)先級與idle 任務(wù)相同的任務(wù)獲得的時間片不是同樣大小的。因為idle任務(wù)會占用某個任務(wù)的部分時間片。
configUSE_MUTEXES
設(shè)為 1 則程序中會包含mutex 相關(guān)的代碼,設(shè)為 0 則忽略相關(guān)的代碼。
configUSE_RECURSIVE_MUTEXES
設(shè)為 1 則程序中會包含recursive mutex 相關(guān)的代碼,設(shè)為 0 則忽略相關(guān)的代碼。
configUSE_COUNTING_SEMAPHORES
設(shè)為 1 則程序中會包含semaphore 相關(guān)的代碼,設(shè)為 0 則忽略相關(guān)的代碼。
configUSE_ALTERNATIVE_API
設(shè)為 1 則程序中會包含一些關(guān)于隊列操作的額外API函數(shù),設(shè)為 0 則忽略相關(guān)的代碼。這些額外提供的API運(yùn)行速度更快,但是臨界區(qū)(關(guān)中斷)的長度也更長。有利也有弊,是否要采用需要用戶自己考慮了。
configCHECK_FOR_STACK_OVERFLOW
控制是否檢測堆棧溢出。
configQUEUE_REGISTRY_SIZE
隊列注冊表有兩個作用,但是這兩個作用都依賴于調(diào)試器的支持:
1. 給隊列一個名字,方便調(diào)試時辨認(rèn)是哪個隊列。
2. 包含調(diào)試器需要的特定信息用來定位隊列和信號量。
如果你的調(diào)試器沒有上述功能,哪個這個注冊表就毫無用處,還占用的寶貴的RAM空間。
configGENERATE_RUN_TIME_STATS
設(shè)置是否產(chǎn)生運(yùn)行時的統(tǒng)計信息,這些信息只對調(diào)試有用,會保存在RAM 中,占用RAM空間。因此,最終程序建議配置成不產(chǎn)生運(yùn)行時統(tǒng)計信息。
configUSE_CO_ROUTINES
設(shè)置為1則包含co-routines 功能,如果包含了co-routines功能,則編譯時需包含croutine.c 文件
configMAX_CO_ROUTINE_PRIORITIES
co-routines 可以使用的優(yōu)先級的數(shù)量。
configUSE_TIMERS
設(shè)置為1則包含軟件定時器功能。
configTIMER_TASK_PRIORITY
設(shè)置軟件定時器任務(wù)的優(yōu)先級。
configTIMER_QUEUE_LENGTH
設(shè)置軟件定時器任務(wù)中用到的命令隊列的長度。
configTIMER_TASK_STACK_DEPTH
設(shè)置軟件定時器任務(wù)需要的任務(wù)堆棧大小。
configKERNEL_INTERRUPT_PRIORITY 和 configMAX_SYSCALL_INTERRUPT_PRIORITY
Cortex-M3, PIC24, dsPIC, PIC32, SuperH 和 RX600 的移植代碼中會使用到 configKERNEL_INTERRUPT_PRIORITY.
PIC32, RX600 和 Cortex-M系列 會使用到 configMAX_SYSCALL_INTERRUPT_PRIORITY
configKERNEL_INTERRUPT_PRIORITY應(yīng)該被設(shè)為最低優(yōu)先級。
對那些只定義了 configKERNEL_INTERRUPT_PRIORITY 的系統(tǒng):
configKERNEL_INTERRUPT_PRIORITY決定了FreeRTOS內(nèi)核使用的優(yōu)先級。
所有調(diào)用API函數(shù)的中斷的優(yōu)先級都應(yīng)設(shè)為這個值,不調(diào)用API函數(shù)的中斷可以設(shè)為更高的優(yōu)先級。
對那些定義了configKERNEL_INTERRUPT_PRIORITY 和configMAX_SYSCALL_INTERRUPT_PRIORITY的系統(tǒng):
configKERNEL_INTERRUPT_PRIORITY決定了FreeRTOS內(nèi)核使用的優(yōu)先級。
configMAX_SYSCALL_INTERRUPT_PRIORITY決定了可以調(diào)用API函數(shù)的中斷的最高優(yōu)先級。高于這個值的中斷處理函數(shù)不能調(diào)用任何API 函數(shù)。
configASSERT
宏configASSERT()的作用類似C語言標(biāo)準(zhǔn)庫中的宏assert(),configASSERT() 可以幫助調(diào)試,但是定義了configASSERT()后會增加程序代碼,也會使程序變慢。
以INCLUDE 開頭參數(shù)
以 'INCLUDE' 開頭的宏允許我們將部分不需要的API 函數(shù)排除在編譯生成的代碼之外。這可以使內(nèi)核代碼占用更少的ROM 和RAM。
比如,如果代碼中需要用到 vTaskDelete 函數(shù)則這樣寫:
#defineINCLUDE_vTaskDelete 1
如果不需要,則這樣寫:
#defineINCLUDE_vTaskDelete 0
評論