FreeRTOS學習筆記 (三)-時間管理vTaskDelay()及vTaskDelayUntil()

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),則表示暫停100ticks,由於每個MCUTicks不同,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 * pvParameters )
 {
 TickType_t xLastWakeTime;
 const TickType_t xFrequency = 10;

     // Initialise the xLastWakeTime variable with the current time.
     xLastWakeTime = xTaskGetTickCount();

     for( ;; )
     {
         // Wait for the next cycle.
         vTaskDelayUntil( &xLastWakeTime, xFrequency );

         // Perform action here.
     }
 }

留言

這個網誌中的熱門文章

FreeRTOS學習筆記 (二)-任務創建和刪除(xTaskCreate及vTaskDelete)

C語言筆記-文本處理(1) 善用 asprintf取代sprintf