ここから本文です

マイコンカーの制御プログラムについての質問です。

謎の情報屋Fさん

2011/10/1922:13:42

マイコンカーの制御プログラムについての質問です。

マイコンカーのプログラムで割り込みをする場合waitの分を割り込みにいれたところmainのプログラムに戻らなくなってしました。
なぜ割り込みにwaitの関数を入れるとおかしくなってしまうのですか??

補足R8です はい

閲覧数:
784
回答数:
2

違反報告

ベストアンサーに選ばれた回答

rc6********さん

編集あり2011/10/2000:07:05

どういうマイコンを使っているのかわからないので、制御系一般論てきなトコで・・・

マイコンの中で割り込み処理で行う内容ってのは、極力短時間に終了するか、もしくは全てをそこで終わらす内容で在るべきなんです。

マイコンで使う制御系アプリケーションでは、連続で行われる処理を連続のままにしておくと、危険な場合(危険を回避できない)があります。マイコンカーというコトなので自走式車両でイメージすると、停止状態から走行開始、直進で時速10Km/hに到達するまで加速し、10Km/hで10秒間走行、右方向へ0→45→0度のハンドリングを3秒行い、直進で10秒走行して停止・・・・ちょっと多いな(-_-;)

まー書いちゃったから、いいや。

加速開始や、ハンドリング操作を割り込みで処理させた場合、加速完了までやハンドリング操作の終了まで処理中は、他の割り込みが出来ないことになります。障害物センサを搭載したり、あるいは緊急停止やブレーキ操作や速度計センサの読み込みなどが一切できない状態で、プログラムされた処理が終了するまで他の事ができなくなります。
これは、まずいんです。制御系では、Windwosアプリのように砂時計出して待たせるというのは、非常にまずいわけなんです。

マイコンでのWaitの多くは、何もしない状態をループ処理して時間をとる手法をとっていますので、そういうWaitを割り込みで使用すると、その「何もせずループ」の処理中に、再度割り込みが発生し、再割り込みのWait処理中に、またまた割り込みが発生し・・・という、再帰呼び出しを繰り返す状態になります。そうなると、mainに戻りません。
Waitが必要な処理であれば、割り込みではフラグ処理をして、main側でフラグを見て処理を行うか、あるいは割り込み処理の最初で再割り込みを禁止しておくというのが常套手段です。


マイコン系での割り込み処理の扱い方は、言葉や文献で説明されても中々ツカメナイんですが、いくつかのプログラム開発を経験すると、ある日突然に「オッ!?」って感じで呑み込める瞬間が来ますょ。


--
せっかく補足してもらったけど、R8は全くしらないですm(__)m
でも、おそらくは上に書いた「割り込み中の割り込み」だと思います。シミュレータでトレースしてみて下さいな。

ベストアンサー以外の回答

1〜1件/1件中

zwi********さん

2011/10/1922:54:18

割り込みは文字通り割り込みですからmainの処理を邪魔します。mainの処理を中断して割り込み処理してそこでずっとWaitしてたらmainにもどれませんからね。

例えると工場でmainラインで仕事しているAさんが、時々呼ばれるsubラインの仕事でずっと待っている状態と言う感じでしょうか。当然ながらmainラインの仕事はその間進みません。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる