有沒有等待計時器過期而不暫停過程的方法?如果我們使用Contiki計時器沒有暫停過程
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
我們暫停過程。 假設我們想繼續做其他的事情,當計時器到期時,檢查一個函數的值是否已經改變。
如果這是不可能的,我可能需要開始一個新的過程,只是等待?
謝謝。
有沒有等待計時器過期而不暫停過程的方法?如果我們使用Contiki計時器沒有暫停過程
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
我們暫停過程。 假設我們想繼續做其他的事情,當計時器到期時,檢查一個函數的值是否已經改變。
如果這是不可能的,我可能需要開始一個新的過程,只是等待?
謝謝。
不,這不是 - 這是事件計時器如何工作的基本結果。 Contiki多線程/多處理是合作的 - 進程必須自願暫停執行以讓其他進程運行。由於事件定時器是由另一個(系統)進程管理的,如果你的進程從不放棄執行,定時器進程永遠不會運行。因此,你的過程永遠不會得到定時器事件。
聽起來像事件計時器可能不是您的最佳選擇。您可以使用rtimer
代替:
rtimer_clock_t end = RTIMER_NOW() + RTIMER_SECOND;
while(RTIMER_CLOCK_LT(RTIMER_NOW(), end)) {
/* do stuff */
}
記得偶爾捅看門狗定時器 - 如果你的程序將被固定在做的事情了幾秒鐘(不推薦反正),看門狗將到期。
正常的方法是編寫一箇中斷處理程序來處理定時器中斷, 中斷處理程序比主應用程序具有更高的優先級。
所以當中斷事件發生時,中斷處理程序運行完成,然後執行返回主應用程序