ハードウェアタイマーで遅延機能を実装する必要があります。タイマー値はミリ秒ごとに増加します。
通常のアプローチは、タイマーレジスタの幅を使用し、に対応するモジュロ動作を使用することです。
volatile int TimerReg;
void Delay(int amount)
{
int start = TimerReg;
int elapsed;
do
{
eleapsed = TimerReg - start;
} while (elapsed < amount);
}
これは、TimerRegの幅がintの場合に機能します。その場合、差now - start
は着実に増加する値です。
しかし、TimerRegの幅がintの幅よりも小さい場合、または(私の場合のように)タイマーが0..1000からしかカウントされない場合、タイマーが999から1000を超えて0にラップするときに問題が発生します。
そのようなタイマーを使用するための良いアプローチは何ですか?これはマイクロコントローラーでは高価なので、モジュロ演算は避けたいと思います。
編集:分割モジュールはまだマイクロコントローラーコードに含まれていません。