macです。
"Masanobu Suzuki" <signas@xxxxxxxxxxxxxxx> wrote:
> 適当なソフトウエア・ウエイトを挿入すれば特にBUSYをチェック
> する必要はありません。私は適当なループ回数で使っています
> が特に問題を起こしたことはありません。(厳密にはウエイト時間
> を計算すればいいんでしょうが・・・)
割り込みでドライブしているタイマーより、
短いWaitがちょっとほしいとき、
static void
stop(void)
{
end = 0;
}
void
msleepInit(void)
{
end = 1;
tickloop = 0;
timer(stop, TPS / 10, SNGL);
while (end != 0) {
tickloop--;
}
tickloop = -tickloop / 100;
}
void
msleep(unsigned long t)
{
volatile long cnt;
cnt = t * tickloop;
while (cnt != 0) {
cnt--;
}
}
のように、ループの時間を自分で較正してしまうと、
クロック周波数が変わっても、書き換えする必要がない、
汎用的な、Software Loopを作れます。
msleepInit()とmsleep()の構造を、
ぴったりあわせておくのがミソです。
-- mac