簡體   English   中英

Contiki計時器,無需暫停過程

[英]Contiki timer without pausing the process

有沒有辦法等待計時器到期而不暫停進程? 如果我們使用

 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 */
}

切記偶爾撥動看門狗計時器-如果您的進程在執行事務時停滯了幾秒鍾(無論如何不建議這樣做),看門狗將過期。

通常的方法是編寫一個中斷處理程序來處理計時器中斷。該中斷處理程序的優先級高於主應用程序。

因此,當發生中斷事件時,中斷處理程序將運行到完成,然后執行返回到主應用程序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM