avr-libc
2.0.0
Standard C library for AVR-GCC
|
AVR Libc Home Page |
AVR Libc Development Pages |
||||
Main Page |
User Manual |
Library Reference |
FAQ |
Example Projects |
関数 | |
void | _delay_loop_1 (uint8_t __count) |
void | _delay_loop_2 (uint16_t __count) |
このヘッダファイルの関数は、ビジー待機する単純な遅延ループを実装しています。これらは、プログラム実行中に短い遅延を発生させるために使用されます。ループを繰り返すことでCPUサイクルカウントを待つ一般的なカウントダウンループで実装されています。そのため、他の処理を同時に行うことができません。ここで説明する機能は、割込みを無効にしていないことに注意してください。
一般的に、長い遅延のは、ハードウェアタイマーを使用するとCPUが、タイマーの実行中に他のイベントの同時処理ができるようになるため、ハードウェアタイマーを使用することをおすすめします。ただし、非常に短い遅延の場合は、ハードウェアタイマーを設定するオーバーヘッドが全体の遅延時間に比べて大きくなります。
実際の遅延アルゴリズムとして、2つのインライン関数が用意されています。
void _delay_loop_1 | ( | uint8_t | __count | ) |
8ビットカウンター__count
を使用した遅延ループ。最大256回のループが可能です。(値256は、0として渡す必要があります。) ループは、コンパイラがカウンタレジスタにセットアップするのに必要なオーバーヘッドを含まず、ループごとに3CPUサイクル必要とします。
したがって、CPU速度 1 MHzでは、768マイクロ秒の遅延が実現できます。
void _delay_loop_2 | ( | uint16_t | __count | ) |
16ビットカウンター__count
を使用した遅延ループ。最大65536回のループが可能です。(値65536は、0として渡す必要があります。) ループは、コンパイラがカウンタレジスタのペアをセットアップするのに必要なオーバーヘッドを含まず、ループごとに4CPUサイクル必要とします。
したがって、CPU速度 1 MHzでは、約262.1ミリ秒の遅延が実現できます。