[H8-ML(3319)] Re:$B3d9~$_$K$h$k%7%j%"%kDL?.$K$D$$$F(B($B%$%s%?%i%W%H%I%j%V%sJT(B)
From: watson8@xxxxxxxxxxxxx
Date: 2003年05月29日(木)06時36分41秒
おはようございます。watson8です。

このスレッド楽しく読ませていただいています。
みなさん「他にも方法が…」と微妙に避けておられるのですが(^^;)
そろそろインタラプトドリブンの話を出してもいいのでは
ないでしょうか。

volatile int FLAG
main()
{
      for(;;) {
          if(FLAG) { //おおコマンド来たぞ
              switch(command) {
              }
          }
      }
}
形式で、メインループ(親)から受信割り込みでハンドラ(子)が
振り出されます。ところがこの親は子供ができたことすら気づかない
ほどいい加減な親なので、子供は親にうまく伝えられず
グローバル変数などを使ってある意味強引に伝えています。

で普通子供は、改めて孫を呼び出し「こういうコマンドが来たから
片つけとけ」と命令します。これは普通のサブルーチンコールです
から、必要なときだけ、必要な情報だけで振り出すことが出来ます。

実際の処理はすべて孫が行い、孫は処理が済んだら消えるだけ(単なる
リターン)。子供も「孫を振り出す任務」を完了したので消えます。
(RTEですがほとんどリターンと同じ) そして主役のはずの親に戻りますが、
実は親にも何もすることが残っていないのです。そこで
main()
{
    for(;;) sleep();
}
のようなメインループになるわけです。
(sleep()は文字通り「お休み」。消費電力が少なくて済みます)

もちろん弱点もありますが、小規模組込みシステムでは、この
スタイルで充分かつすっきり実現できるケースも多いものと思います。


スレ/読んだ方混乱しませんように祈りつつ

watson8


mailto:watson8@xxxxxxx
http://watson8.com/


スレッド概略
[表示中](起点)
 └[3337(1)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]