第4話 delay関数でタイミング合わせ
delay関数で同期処理をしてもよい?
delayで同期処理をしない、ことを推奨します。
何かの動作の完了を待つような処理を同期処理と言います。delay関数による同期処理の問題を以下に説明します。
delay関数の中身は、ループを回ってCPUの実行時間を消費しているだけですので、delay関数の中では、他の処理を実行することはできません。そのため、全体の制御ループの時間が10msecと仮定した場合、msecオーダーの時間をdelay関数で待つ場合、かなりの時間、無駄にCPUを消費することになります。
また、メカ系のように、制御対象が動作完了になるまでの時間がばらつくような場合、最も動作が遅いときに合わせて、待ち時間を設定する必要があり、やはり無駄なCPUを使うことになります。このような場合は、制御対象から動作完了の信号(Ack)を受け取り、この信号の到着により次に進むようなトリガー型の同期の仕組みを導入する必要があります。
ただし、delay関数で待つ時間が、μsecオーダーで全体の制御ループの時間に比べて無視できるような場合は、delay関数による同期処理を用いてもよいと言えます。[はる]
用語
制御スレッド
失敗パターン
途中で待つ
解法パターン
走り切り
●設計ドリルに挑戦
delayを使わないプログラミング