過去ログ
No827 msecオーダーのwait処理
[戻る]
[ホームページ]
No.10458
Wait処理
投稿者---T(2003/11/12 11:10:51)
msecオーダーのwait処理をしたいのですがうまくいきません。
どなたか教えてください。
ちなみに私がした方法は以下の通りです。
a=100; ←aは1msec毎に呼ばれる割り込み関数内で
デクリされていきます、なので100で100msecになります
for(;a > 0;); aが0になったらぬける。
:
:
他処理
このfor文の使い方がまちがってるのでしょうか?
0になってもぬけません。
No.10459
Re:Wait処理
投稿者---T(2003/11/12 11:38:40)
解決しました。
(現象)
コンパイラの最適化によりfor文以降がなくなっていた。
(対策)
aをvolatile宣言する。
他にwait方法があれば教えて下さい。
No.10468
Re:Wait処理
投稿者---
かずま
(2003/11/12 19:14:31)
> 他にwait方法があれば教えて下さい。
処理系に依存しますが、usleep(1000000);
または select()。
No.10460
Re:Wait処理
投稿者---JUN2(2003/11/12 11:51:24)
CPUの動作クロックや、クロックウェイトなどにもよりますが
>for(;a > 0;);
はいくつかのアセンブラ命令に展開できます。
タイミングによってはaが0になってから比較処理の
命令をする前に次の割り込みがありaがアンダーフロー
している可能性があります。
でも、そんな遅いCPU?
とりあえず、割り込み処理関数でデクリしたaが0になったら場合割り込み禁止。
もしくは、デクリする前にaが0だったらデクリしないという処理
はいれたほうがいい。
No.10461
Re:Wait処理
投稿者---T(2003/11/12 12:38:52)
そのように処理しました。
勉強になりました。
有難うございます。