ソフトウェアアーキテクチャ博物館AtMuseum
FAQ


FAQ01:delayで待ち合わせしてはいけないのですか?

A. delayで同期処理をしない、ことを推奨します。

何かの動作の完了を待つような処理を同期処理と言います。delay関数による同期処理の問題を以下に説明します。

delay関数の中身は、ループを回ってCPUの実行時間を消費しているだけですので、delay関数の中では、他の処理を実行することはできません。そのため、全体の制御ループの時間が10msecと仮定した場合、msecオーダーの時間をdelay関数で待つ場合、かなりの時間、無駄にCPUを消費することになります。

また、メカ系のように、制御対象が動作完了になるまでの時間がばらつくような場合、最も動作が遅いときに合わせて、待ち時間を設定する必要があり、やはり無駄なCPUを使うことになります。このような場合は、制御対象から動作完了の信号(Ack)を受け取り、この信号の到着により次に進むようなトリガー型の同期の仕組みを導入する必要があります。

ただし、delay関数で待つ時間が、μsecオーダーで全体の制御ループの時間に比べて無視できるような場合は、delay関数による同期処理を用いてもよいと言えます。[はる]

用語

制御スレッド

失敗パターン

途中で待つ

解法パターン

走り切り

●設計ドリルに挑戦

 delayを使わないプログラミング