FreeRTOS 任務中,在函數中使用延時函數就會讓任務進入阻塞狀態 (block) , 通常使用 vTaskDelay() 及 vTaskDelayUntil() 。 -vTaskDelay() 為相對延時 -vTaskDelayUntil() 為絕對延時 要使用則在 FreeRTOSConfig.h 中必須定義 : #define INCLUDE_vTaskDelay 1 #define INCLUDE_pcTaskGetTaskName 1 -------------------------------------------------------- 1.vTaskDelay() 其原型為 : void vTaskDelay ( const TickType_t xTicksToDelay ) -參數: const TickType_t xTicksToDelay 如果直接給數值,如 vTaskDelay(100) ,則表示暫停 100 個 ticks ,由於每個 MCU 的 Ticks 不同, FreeRTOS 提供了 #define portTICK_RATE_MS portTICK_PERIOD_MS #define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ ) 幫我們轉為 ms ,故 vTaskDelay(100) 就是讓任務暫停 100ms 2.vTaskDelayUntil() 其原型為: void vTaskDelayUntil ( TickType_t * const pxPreviousWakeTime, const TickType_t xTimeIncrement ) 使用範例: // Perform an action every 10 ticks. void vTaskFunction( void * pvParameter...
留言
張貼留言