1、函數(shù) taskYIELD()
此函數(shù)用于進行任務(wù)切換,此函數(shù)本質(zhì)上是一個宏。
2、函數(shù) taskENTER_CRITICAL()
進入臨界區(qū),用于任務(wù)函數(shù)中,本質(zhì)上是一個宏。
3、函數(shù) taskEXIT_CRITICAL()
退出臨界區(qū),用于任務(wù)函數(shù)中,本質(zhì)上是一個宏。
4、函數(shù) taskENTER_CRITICAL_FROM_ISR()
進入臨界區(qū),用于中斷服務(wù)函數(shù)中,此函數(shù)本質(zhì)上是一個宏。
5、函數(shù) taskEXIT_CRITICAL_FROM_ISR()
退出臨界區(qū),用于中斷服務(wù)函數(shù)中,此函數(shù)本質(zhì)上是一個宏。
6、函數(shù) taskDISABLE_INTERRUPTS()
關(guān)閉可屏蔽的中斷,此函數(shù)本質(zhì)上是一個宏。
7、函數(shù) taskENABLE_INTERRUPTS()
打開可屏蔽的中斷,此函數(shù)本質(zhì)上是一個宏。
8、函數(shù) vTaskStartScheduler()
啟動任務(wù)調(diào)度器。
9、函數(shù) vTaskEndScheduler()
關(guān)閉任務(wù)調(diào)度器。
此函數(shù)僅用于 X86 架構(gòu)的處理器,調(diào)用此函數(shù)以后所有系統(tǒng)時鐘就會停止運行,所有創(chuàng)建的任務(wù)都會自動的刪除掉(FreeRTOS 對此函數(shù)的解釋是會自動刪除所有的任務(wù),但是在 FreeRTOS 的源碼中沒有找到相關(guān)的處理過程,有可能要根據(jù)實際情況編寫相關(guān)代碼,亦或是 X86 的硬件會自動處理?筆者不了解 X86 架構(gòu)),多任務(wù)性能關(guān)閉。可以調(diào)用函數(shù)vTaskStartScheduler()來重新開啟任務(wù)調(diào)度器。此函數(shù)在文件 tasks.c 中有如下定義:
void
vTaskEndScheduler
(
void
)
{
portDISABLE_INTERRUPTS();
//關(guān)閉中斷
xSchedulerRunning=pdFALSE;
//標記任務(wù)調(diào)度器停止運行
vPortEndScheduler();
//調(diào)用硬件層關(guān)閉中斷的處理函數(shù)
}
函數(shù) vPortEndScheduler()在 port.c 中有定義,這個函數(shù)在移植 FreeRTOS 的時候要根據(jù)實際使用的處理器來編寫,此處沒有實現(xiàn)這個函數(shù),只是簡單的加了一行斷言,函數(shù)如下:
void
vPortEndScheduler
(
void
)
{
configASSERT(uxCriticalNesting==
1000U
L);
}
10、函數(shù) vTaskSuspendAll()
掛起任務(wù)調(diào)度器,調(diào)用此函數(shù)不需要關(guān)閉可屏蔽中斷即可掛起任務(wù)調(diào)度器,此函數(shù)在文件tasks.c 中定義。
11、函數(shù) xTaskResumeAll()
此函數(shù)用于將任務(wù)調(diào)度器從掛起壯態(tài)恢復(fù)。
12、函數(shù) vTaskStepTick()
此 函 數(shù) 在 使 用 FreeRTOS 的 低 功 耗 tickless 模 式 的 時 候 會 用 到 , 即 宏 configUSE_TICKLESS_IDLE 為 1。當使能低功耗 tickless 模式以后在執(zhí)行空閑任務(wù)的時候系統(tǒng)時鐘節(jié)拍中斷就會停止運行,系統(tǒng)時鐘中斷停止運行的這段時間必須得補上,這個工作就是由 函數(shù) vTaskStepTick()來完成的,此函數(shù)在文件 tasks.c 中定義。
-
嵌入式
+關(guān)注
關(guān)注
5072文章
19026瀏覽量
303532 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
483瀏覽量
62019
發(fā)布評論請先 登錄
相關(guān)推薦
評論