C言語関係掲示板

過去ログ

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)


そのように処理しました。

勉強になりました。
有難うございます。