Re: The history of "M&Y"

Team "M&Y" and "花鳥風月"
the soliloquy of the father
毎日更新!

AVRねた その25 ループでの時間待ち

2009-07-29 | AVRねた

割り込みによるタイマーで1/100秒を計れるようになりました。


しかし、もっと基本的な時間待ちを試してみたくなりました。

そうです。

単なるループでの時間待ちです。

何回のループで1秒の待ちになるか確認してみます。

500,000,000回(5億回)のループで大体8秒でした。

ということは、1回のループに0.000000002秒です。(0.002μ秒 速っ~!)

すごいよAVR!



と単純にびっくりしていましたが・・・待てよ! また単純なプログラムなので、変数がレジスタに乗ってしまっているだけかも知れない・・・と疑ってみるとやっぱりそうでした。

ループの変数の定義に volatile を付けてみると・・・とてつもなく遅くなりました。

2,500,000回のループで大体11秒です。

すると、1回のループに0.0000004秒です。(0.4μ秒 まあ、こんなもんか)

#include <avr/io.h>

#define LED_SET DDRC |= 0x10
#define LED_ON  PORTC |= 0x10
#define LED_OFF PORTC &= ~0x10

int main( void )

   {
   volatile long i;

   LED_SET;

   while(1)
      {
      LED_ON;
      for(i=0 ; i<2500000L ; i++);
      LED_OFF;
      for(i=0 ; i<500000L ; i++);
      }
   }

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする