おはようございます。watson8です。
このスレッド楽しく読ませていただいています。
みなさん「他にも方法が…」と微妙に避けておられるのですが(^^;)
そろそろインタラプトドリブンの話を出してもいいのでは
ないでしょうか。
volatile int FLAG
main()
{
for(;;) {
if(FLAG) { //おおコマンド来たぞ
switch(command) {
}
}
}
}
形式で、メインループ(親)から受信割り込みでハンドラ(子)が
振り出されます。ところがこの親は子供ができたことすら気づかない
ほどいい加減な親なので、子供は親にうまく伝えられず
グローバル変数などを使ってある意味強引に伝えています。
で普通子供は、改めて孫を呼び出し「こういうコマンドが来たから
片つけとけ」と命令します。これは普通のサブルーチンコールです
から、必要なときだけ、必要な情報だけで振り出すことが出来ます。
実際の処理はすべて孫が行い、孫は処理が済んだら消えるだけ(単なる
リターン)。子供も「孫を振り出す任務」を完了したので消えます。
(RTEですがほとんどリターンと同じ) そして主役のはずの親に戻りますが、
実は親にも何もすることが残っていないのです。そこで
main()
{
for(;;) sleep();
}
のようなメインループになるわけです。
(sleep()は文字通り「お休み」。消費電力が少なくて済みます)
もちろん弱点もありますが、小規模組込みシステムでは、この
スタイルで充分かつすっきり実現できるケースも多いものと思います。
スレ/読んだ方混乱しませんように祈りつつ
watson8
mailto:watson8@xxxxxxx
http://watson8.com/