- ベストアンサー
マイコンの割り込みについて教えて下さい
マイコンの割り込みを使う意義を教えてください。 割り込みは、なんらかのトリガーによって用意された関数が実行されるものだと思っています。 ですが、それはifで条件を書いて別の関数を呼び出すこととかわりはないと思っています。 やはり、割り込みの使い方がそれだけでないということだと思うのですが、具体的に、どういう場合では割り込みを使わないと実現できないのか(if文などで互換できないのか)を教えて下さい
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
たとえば4000Hzの音を出す時1秒間に4000回のON/OFFを繰り返す必要があります、(計8000回) これをプログラムで組むと、ポートのON,1/8000秒待つ、ポートのOFF,1/8000秒待つ、のループを音を鳴らしている間繰り返すことになります これでは音を出してる間他の仕事が出来ません、TVゲームなら音を出してる間画面が止まることになります これを割り込み処理にすると、メインプログラムで音を出すフラグをセットすれば、後は自動的に音が出るようになり メインプログラムは他の仕事に専念できます、(マルチタスク処理) キースキャン、RS232受信、LEDのダイナミック表示、これらを割り込み処理で行わないと キー入力が遅い2重入力、RS232受信データの取りこぼし、LED表示がちらつく等の弊害がでます パソコンでは、Windows及びサブCPUが処理するのでユーザープログラムが意識するすることはありませんが 組み込みマイコンでは自前で処理しなければなりません。
その他の回答 (6)
- 中村 拓男(@tknakamuri)
- ベストアンサー率35% (674/1896)
>それはifで条件を書いて別の関数を呼び出すことと >かわりはないと思っています。 特定のハードウェアイベントに対するハンドラを 実行するには、割り込みを使うか、 ハードウェアイベントが起きたことを検査する 処理を常時実行するしかありません。 後者は大きなCPUパワーを食う上、応答が遅いのです。
- trytobe
- ベストアンサー率36% (3457/9591)
単純な例だと、リセットボタンを押したら、何を実行している途中でも、とにかく再起動処理にジャンプする、という if 文とかで待っていなくても、CPUにハードウェアからの信号が来たときに、強制的にそちらの処理を優先する、という仕掛け(interrupt:割り込み)なのです。
- maiko0318
- ベストアンサー率21% (1483/6969)
逆に言うと、割り込みがあるからハッキングされるのかもしれません。 あなたが仕事中、AさんとBさんの用事だけチェックするようになっていたら、 Cさんが何を言ってきても無視するだけ。 拳銃強盗も、ナイフを持ってきても動じることもなく、仕事ができる。 Cさんを無視するってことは、あなたが新しいソフトを インストールすることはできないということです。 新しいソフト(Cさん)がCPU(あなた)を使うことはできないのですから。
- maiko0318
- ベストアンサー率21% (1483/6969)
考え方ですが、 あなたがなにか仕事をしているとします。 Aさんがなにか言ってきました。その作業をします。 電話がかかってきました。応対します。 この作業を、割り込みを使わないですると、 あなたが仕事をしていますが、 Aさんの用事はないですか? Bさんも用事はないですか? Cさんも用事はないですか? 電話はかかってきていませんか? というのを延々チェックしながらの仕事になります。 こんなのは仕事になりませんよね。 もっと違うことで考えましょう。 あなたは寝ています。 7時になったら目覚ましが鳴ってあなたは起きます。 ↓ あなたは寝ていますが、目覚ましは鳴りません。 でも、起きるのは7時ですので、常に時間を気にしながら寝ます。 なんてことはできないですよね。 火災になって飛び起きることもあるでしょうし、地震に揺られることもあるでしょう。 いちいちチェックしてられませんよね。 コンピュータってのは人が作っています。 人がしている処理を模して作るのが鉄則になっています。 なぜか?異常が起きた時、人が考えつく原因に留めるためです。 異常が起きた時、異星人が作ったようなコンピュータでは対処できません。
- trajaa
- ベストアンサー率22% (2662/11921)
if文で条件判断するとしたら 判断して処理が実行できるのはある一瞬でしかない その他の処理を実行している最中はずっと要求が待たされてしまう 例えば、キーボード入力を割り込みではなくif判定で行ったとすれば キーを押してもなかなか反応せずに、忘れた頃にキー入力される そんなキーボード入力は使い物になるだろうか? マウスだって同じ、カクカク動くマウスカーソルは使いにくいねぇ 割り込みを使えば、他の処理を実行中であっても何か処理が必要なイベントが起きれば即座に必要な処理を実行できる
- kmee
- ベストアンサー率55% (1857/3366)
もし、if でやろうとすれば loop: if 「割り込み信号」=ON then 処理 goto loop みたいなループを作るとか 処理1 処理2 処理3 というプログラムがあったとしたら 処理1 if 「割り込み信号」=ON then 処理 処理2 if 「割り込み信号」=ON then 処理 処理3 if 「割り込み信号」=ON then 処理 と判定用ifを大量に入れるとか というように、大量のifが必要となります。 割り込みを使うことで、このifにかかるコスト(時間、プログラムに使用するメモリ、等)を抑えることができます。 特に、前者の待ちループですが、専用の待ち命令が用意されていたり、HALT/STOP等のCPU停止命令(停止中も割り込みは有効)で代用したりできることが多いです。