2016-09-13 11 views
-5

私のデータロガープロジェクトでは、6時間ごとに温度値を保存する必要があります。ティッカーの最大時間は30分です。 6時間か10時間のような長いデュラレーションで中断することができる方法はありますか?6時間ごとに割り込みを行う方法

ありがとうございました。

+1

*たくさんの方法があります。あなたのシステムがすでに中央I/Oループを持っている場合は、最初にそれを見てください。そういう施設が既にあるようです。 –

+1

1つの可能性:割り込みの間隔を1分と言い、自分自身を数えてください。 –

答えて

2

30分ごとに割り込みを行うことができます。 ..

volatile int interruptCounter = 0; 
void interruptFunction (void) 
{ 
    interruptCounter++; 
    if(interruptCounter == 12) 
    { 
     interruptcounter = 0; 
     /* 
      Do your stuff here 
     */ 
    } 
} 

なぜ12行のすべての11個の割り込みを無視してのみ12 1を処理する唯一の方法があった場合は? 0.5時間ごとに発生する割り込みを処理できるためです。したがって、それを処理するために、6時間毎のカウンタ値は6/0.5 = 12になります.10時間は10/0.5 = 20になります。

+0

ありがとうGravell – Gandhi

+2

良い:+1。しかし、ここでの「不安定」はあまり意味がありません。ローカルスコープの 'static uint8_t'は問題ありません。そして、 '=='の代わりに '> ='を常に確認してください。 – LPs

+0

@LPsあなたは 'volatile 'を使用しています。これは、変数が割り込み機能の内部と外部の両方で使用されている場合にのみ意味があります。割り込み関数の中で 'volatile 'を使用するのは、ある種の習慣です。そしてあなたは '> =' checkで正しいですが、このケースでは 'interruptCounter == 12'チェックを"見逃す "方法はありません。 – Gravell

関連する問題