vTaskDelayUntil 任務(wù)絕對延時(shí)

2018-07-22 14:12 更新

vTaskDelayUntil

函數(shù)名 :vTaskDelayUntil 頭文件 :task.h 函數(shù)功能:任務(wù)絕對延時(shí) 函數(shù)聲明:

void vTaskDelayUntil( portTickType *pxPreviousWakeTime, portTickTypexTimeIncrement );

INCLUDE_vTaskDelayUntil 必須定義為 1以使能此函數(shù)。見configuration 章節(jié)獲得更多信息。 延遲任務(wù)直到一個(gè)指定的時(shí)間結(jié)束。該函數(shù)用在周期性任務(wù)以保證任務(wù)執(zhí)行頻率的穩(wěn)定。 與上vTaskDelay 不同的是該任務(wù)指定絕對時(shí)間,vTaskDelay指定相對時(shí)間。 (筆者注釋:原文接下來兩小段反復(fù)解釋為什么一個(gè)是相對時(shí)間一個(gè)是絕對時(shí)間,翻譯 省略,后續(xù)筆者會描述。) 必須注意,vTaskDelayUntil() 會立即返回(沒有阻塞)如果它用來指定一個(gè)已經(jīng)過去 的喚醒時(shí)間。所以任務(wù)用vTaskDelayUntil() 來執(zhí)行周期必須重新計(jì)算它需要的喚醒時(shí)間, 如果該周期執(zhí)行由于任何導(dǎo)致任務(wù)丟失 1個(gè)或者多個(gè)周期的理由被打斷(比如該任務(wù)被掛 起) 這可以由檢查pxPreviousWake 傳遞的變量與當(dāng)前的時(shí)間封計(jì)數(shù)器來做比較檢測到。在 大多數(shù)情況這不是必須的的。 常量portTICK_RATE_MS 可以用來計(jì)算時(shí)間封的實(shí)際時(shí)間間隔。 當(dāng)調(diào)度器由于應(yīng)用調(diào)用vTaskSuspendAll()導(dǎo)致掛起(調(diào)度器暫停),不能調(diào)用此函數(shù)。 具體參數(shù) pxPreviousWakeTime :上一次喚醒的時(shí)間計(jì)數(shù)器。 xTimeIncrement :間隔周期計(jì)數(shù)器。 (筆者注釋:如果有寫過以定時(shí)器方式查詢按鍵,去抖動等程序,或者看過 PIC591鍵盤程序的用戶,對這兩個(gè)參數(shù)的作用應(yīng)當(dāng)很容易從直觀上理解。對于所有的 RTOS,都有一個(gè)時(shí)間封(心跳時(shí)間),需要靠經(jīng)過設(shè)置后能提供周期性中斷功能的定時(shí)器來實(shí)現(xiàn),而當(dāng) RTOS發(fā)動時(shí),將有一個(gè)計(jì)數(shù)器來計(jì)數(shù)這是第幾次定時(shí)中斷,這個(gè)計(jì)數(shù)器一般只會自然溢出,即達(dá)到最大值后歸0。讀這個(gè)計(jì)數(shù)器的值,就等于了解了從FRTOS開始運(yùn)行,到當(dāng)下,經(jīng)歷了多少時(shí)間間隔(不考慮歸0),而所謂的絕對延時(shí),就是只關(guān)心上一次的計(jì)數(shù)器時(shí)間 pxPreviousWakeTime,以及經(jīng)歷多長時(shí)間 xTimeIncrement后完成定時(shí)。至于計(jì)數(shù)器溢出,不會影響什么,只要這兩個(gè)參數(shù)與系統(tǒng)的計(jì)數(shù)器的數(shù)據(jù)類型一致,又都采用自然溢出方式計(jì)算就可以。) 范例:

// Perform an action every 10 ticks.
void vTaskFunction( void * pvParameters )
{
    portTickType xLastWakeTime;
    const portTickType xFrequency = 10;
    // Initialise the xLastWakeTime variable with the current time.
    xLastWakeTime = xTaskGetTickCount();
    for( ;; )
    {
        // Wait for the next cycle.
        vTaskDelayUntil( &xLastWakeTime, xFrequency );
        // Perform action here.
    }
}
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號