我想開發一個contiki代碼片段,我需要等待傳感器輸出三秒鐘。儘管在開發時這聽起來可能聽起來很像傳感器,但我想模擬人類可讀速度下的行爲,因此我需要將計時器設置爲3秒。Contiki在幾秒鐘內延遲
contiki定時器library是不錯的documented並有一個很好的系列的例子,提到了定時器的創建,設置和重置。但是,如果我有一個像下面的代碼:
timer_set(&transducerOutputWaitTimer);
bool if_blk_executed;
if(timer_expired(&&transducerOutputWaitTimer)){
if_blk_executed = true;
//do something
}
if(if_blk_executed)
printf("Sunrise");
else
printf("It is not dawned yet");
現在到期不立即設置計時器後觸發。所以if塊永遠不會被執行。實際上它永遠不會黎明。
現在有兩種方法可以讓系統等待。一,通過在計時器上添加一個while循環,如下所示: while(!timer_expired(& & transducerOutputWaitTimer)){}; //做某事
或 cpu_delay_usecs {mytimerdur_in_secs * 10^6 *}; //做某事
我沒有看到任何一種方法都很優雅。當一個人浪費CPU週期時,另一個人執行不必要的大計算。
有沒有更好的方法?我知道,時鐘
附加到這個問題的有以下兩種:
我怎樣才能觸發一個半自助旅遊旅行社protothread從另一個?如果我可以做到這一點,我可以得到中斷,導致transducerOutput調用一個可以觸發etimer並處理事件的進程。
CPU延遲究竟意味着什麼?這是否意味着整個CPU時鐘週期在給定的持續時間內被阻止?如果是,那麼系統中當前運行的其他進程如何受到影響?
更新 更新1:雖然方法不起作用。代碼可能進入無限循環。 更新2:在設置我的計時器後,我嘗試了clock_delay(3 * CLOCK_SECOND)方法。有效。但是,在這種情況下,爲什麼我需要定時器方法呢?
更新3(這改變了答案的上下文中,因此加入此評論按照建議)
我的計時器需要以不同的空隙功能的處理之外使用。在這種情況下,我需要使用定時器()庫,而不是etimer(這是特定的一個過程。那麼,如何讓我的方法,以等待在這種情況下所需的時間?
問題更新 –