2017-08-10 94 views
0

有沒有等待計時器過期而不暫停過程的方法?如果我們使用Contiki計時器沒有暫停過程

PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et)); 

我們暫停過程。 假設我們想繼續做其他的事情,當計時器到期時,檢查一個函數的值是否已經改變。

如果這是不可能的,我可能需要開始一個新的過程,只是等待?

謝謝。

回答

0

不,這不是 - 這是事件計時器如何工作的基本結果。 Contiki多線程/多處理是合作的 - 進程必須自願暫停執行以讓其他進程運行。由於事件定時器是由另一個(系統)進程管理的,如果你的進程從不放棄執行,定時器進程永遠不會運行。因此,你的過程永遠不會得到定時器事件。

聽起來像事件計時器可能不是您的最佳選擇。您可以使用rtimer代替:

rtimer_clock_t end = RTIMER_NOW() + RTIMER_SECOND; 
while(RTIMER_CLOCK_LT(RTIMER_NOW(), end)) { 
    /* do stuff */ 
} 

記得偶爾捅看門狗定時器 - 如果你的程序將被固定在做的事情了幾秒鐘(不推薦反正),看門狗將到期。

0

正常的方法是編寫一箇中斷處理程序來處理定時器中斷, 中斷處理程序比主應用程序具有更高的優先級。

所以當中斷事件發生時,中斷處理程序運行完成,然後執行返回主應用程序