2011-12-15 78 views
2

在幾秒鐘內創建遞減計時器的最簡單最簡單的方法是什麼?最簡單的方法來創建一個計時器在幾秒鐘內?

即時通訊使用8位微控制器,無法使用浮點或密集型進程。我需要一個非常有效的計時器。

+0

請先嚐試谷歌:http://www.cs.utah.edu/dept/old/texinfo/glibc-manual-0.02/library_19.html – Jon 2011-12-15 20:11:18

回答

3

time(2)是一個標準的C函數,用於獲取自該時代(1970年1月1日午夜)以秒計的當前時間。爲了使減量定時器,你可以做這樣的事情:

time_t startTime = time(NULL); 

time_t timerDuration = 10; // 10 second timer 
time_t endTime = startTime + timerDuration; 
while(1) 
{ 
    time_t currTime = time(NULL); 
    time_t timeLeft = endTime - currTime; 

    if(timeLeft < 0) 
    { 
     // timer has finished 
     break; 
    } 

    // do stuff - preferably don't spin at 100% CPU 
} 

如果需要超過1秒爲增量更精確,您可以使用特定於平臺的功能,如gettimeofday(3)(POSIX)或GetLocalTime(視窗) 。

+0

感謝您的回覆!我什麼時候初始化倒計時?例如我只想在特定條件之後開始倒計時。 – NLed 2011-12-15 20:16:31

1

它看起來像你想異步計時器。在一個8位控制器上,我想你沒有多線程。但是你可能直接訪問硬件定時器;大多數8位控制器有幾個。根據需要分配一個定時器,或者使用已知週期的現有定時器。這是一樣有效的,你可以得到。

每當計時器滴答時,您都會收到一箇中斷。這可能是每隔一秒或更頻繁。更新一個保留時間的變量,並從中斷處理程序返回(或者,如果掛接用於其他需要的計時器,則將控件傳遞給鏈接處理程序)。

如果計時變量超過閾值,那就是您的事件;採取行動。請務必不要讓此操作花費太長時間,並且請諮詢您的控制器參考資料,瞭解中斷處理程序中不允許的操作。

相關問題