avr-libc  2.0.0
Standard C library for AVR-GCC

AVR Libc Home Page

AVRs

AVR Libc Development Pages

Main Page

User Manual

Library Reference

FAQ

Example Projects

関数
<util/delay_basic.h>: 基本的な busy-wait 遅延ループ

関数

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ミリ秒の遅延が実現できます。