2011-12-15 18 views
2

デクリメントタイマーを数秒で作成する最も簡単で簡単な方法は何ですか?数秒でタイマーを作成する最も簡単な方法は?

私は8ビットマイクロコントローラを使用しており、浮動小数点または集中的なプロセスは使用できません。私は非常に効率的なタイマーが必要です。

+0

Googleを最初にお試しください:http://www.cs.utah.edu/dept/old/texinfo/glibc-manual-0.02/library_19.html – Jon

答えて

3

time(2)は、エポック(1970年1月1日の真夜中)以降の現在の時間を秒単位で取得する標準的なC関数です。あなたは1秒単位以上の精度が必要な場合は、あなたがそのようなgettimeofday(3)(POSIX)またはGetLocalTime(Windowsの場合)として、プラットフォーム固有の機能を使用することができます

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 
} 

:減算タイマーを作成するには、このような何かを行うことができます。

+0

返信ありがとうございます!いつカウントダウンを初期化するのですか?たとえば、特定の条件の後にカウントダウンを開始するだけです。 – NLed

+0

@Fendi:?その後、それを初期化してください。 – NotMe

+0

プログラムが実行されるとすぐにこのカウントダウンが開始されますか?私は、タイマーがカウントダウンを開始するときに条件が真にならない限り、タイマーをその所与の値に保ちたい。 – NLed

1

非同期のタイマーが必要です。 8ビットコントローラでは、マルチスレッド化していないと思います。しかし、おそらく、ハードウェアタイマーに直接アクセスできます。ほとんどの8ビットコントローラにはいくつかのものがあります。あなたのニーズに合わせてタイマーの1つを割り当てるか、または既知の期間を持つ既存のタイマーを使用してください。それはあなたが得ることができるほど効率的です。

タイマーが刻々と変化するたびに、割り込みが発生します。これは毎秒またはそれ以上頻繁に行われることがあります。時間を保持し、割り込みハンドラから戻る変数を更新します(または、他のニーズに使用されるタイマーを使用する場合は、コントロールを連鎖ハンドラに渡します)。

時間管理変数がしきい値を超えている場合は、それがあなたのイベントです。あなたの行動を取る。このアクションに時間がかかりすぎないように注意し、割り込みハンドラ内で許可されていないアクションについてコントローラリファレンスを参照してください。

関連する問題