[H8-ML(2473)] Re: 初めましてでTrap教えて
From: katsutoshi ito <itokatsu@xxxxxxxxxxxxxxxxxxx>
Date: 2002年11月27日(水)09時59分48秒
> 素朴な質問です。
> H8/300Hシリーズをよく使うのですが、未だにTrap例外処理を使ったことがあり
> ません。
>  通常の関数コールとの違いを教えていただけませんでしょうか?

通常の関数コールとの違いってなると、プログラムを組む段階で、全体処理のどの時点で
その(例外)処理が起こるかが分かっている、もしくは全体の内のそこで処理するものと
決めている場合は関数コールするし、あくまで例外処理(うーむ、まんまだ)
したい時には Trap するんではないでしょうか。おいおい。。。

めちゃめちゃ抽象的(かつ外部割込みも内部割込みもごっちゃ)なんで役立たずな説明ですけど、、、

たとえばあるボタンを押されたら決まった処理をするってプログラムを組む時、
H8 のサンプルで良くありますけど、メインループ中でボタンが押されたかどうかを
確認しつつぐるぐる回ってますよね。で、 LED を光らせたりしますよね。

このボタンというやつが、例えばリセット機能を実現するためのボタンだとするとメインループの中で
監視し続けるのって結構間抜けですよね。

そういったいつ起こるんだか分からないイベントをプログラムのロジックに組み込んでやる
のではなく、そのボタンが押されたら割り込み信号を通知し、この割り込みがきたら
ってか発生したらプログラムのどの部分をやっていようと、そのサブルーチンに飛んで
例外処理を実行する様に、まさにトラップを仕掛けておくわけですよね。

つまりそのサブルーチンの発生タイミングはプログラムが決めるのではない。。。

極端な話ですけど、 H8 のサンプルプログラムの LED を光らせるプログラムで
メインループ中のどこかに待ち時間を 10 sec とかとってやって、まわしたらどうなるでしょう。
ボタンを押した時に、たまたま、プログラムの処理がそのポートのチェックに入ればいいですけど、
10 sec の待ちの間だと、どっかでラッチしておかない限り無理でしょう。
反応の鈍いボタンになりそうです。ゲームの達人なんかキレそうです。

けど、割り込みの場合は押されたかどうかをチェックするのではなく、押したよってことを
通知して所定の例外処理に入ってもらうので洩れはなくなりますよね。

優先順位なんかもあるので必ずしも割り込みを受けたら即例外処理に入るわけでもないでしょうが、
低位のシステム(組み込みとか)構築をする分には、ほぼ必須のテクノロジーではないかと。

だらだら書いたんですけど、イメージ的にはこんなもんではないでしょうか。と思ってます。
但し私はシロートなんでかなり高純度にウソ入ってます。

伊東 @ 職場
スレッド概略
[2470(R)](起点)
 └[表示中]


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


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