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