No.4ベストアンサー
- 回答日時:
(1)別ルーチンに飛ばすというのがサブルーチンを呼び出すという意味なら一般的には可能です。
ただしANo.3で書かれているように、一般にサブルーチンは再入可能であることが求められます。なお、使用レジスタの保存は割込み処理ルーチンに求められるもので、サブルーチンを呼ぶからというものではないと思います。
あと、一般的に割込みスタックはそれほど深くないので可能な入れ子段数には注意が必要です。まあ組込みなら普通のプログラムでも注意は必要ですが。
別ルーチンに行ったまま帰ってこないということなら、処理系によるでしょう。割込み終了システムコールを使うなら別ルーチンで終了ということもできると思います。
(2)割込み処理ルーチンからの復帰はどこでも可能ですが、returnで戻れるかは処理系によります。
OSによっては最後はシステムコール呼び出しになっている場合があります。その場合はreturnでなくシステムコール呼び出しが必要でしょう。
No.3
- 回答日時:
(1)割り込みルーチン中から別のルーチンに飛ばすことは可能でしょうか?
可能です。ただし、何点か注意が必要です。
a()が再入可能(リエントラント)なルーチンでないとトラブルになることが有ります。
再入可能出ない場合には、a()を実行中にa()を使用する割り込みが発生しないことを保障する必要があります。
a()で使用するレジスタが保存される必要があります。
一部のレジスタは自動的に保存されますが、保存されないレジスタが有る場合にはコンパイラに指示を出す必要があります。
どのレジスタが保存されるのか、どのように指示をするのかは環境異存なので開発環境のマニュアルを読んでください。
(2)割り込みルーチンの途中で最後まで処理を終えずに、割り込み先に復帰させることは可能でしょうか?
問題ありません。
No.2
- 回答日時:
割り込みと一口に言っても、ハード割り込みとソフト割り込みの二種類があって
前者の場合、ms単位で処理を完了しないといけません。
なんで、他の関数を呼び出すというのは、御法度です。
後者の場合、呼び出すことは可能ですが、
割り込み処理中にまた割り込みが発生するケースを考慮しなければなりません。
というわけで、経験的には、
割り込み処理では、発生したイベント(情報)自体をスタック管理しておいて
メインループにて手動で取り出してあげるというのが結構無難だったりします。
割り込みじゃないじゃんといわれてしまえばそれまでですが、
何をするにしてもプログラム的にある程度の区切りをつけておかないと
異常系の処理をするにしても都合が悪くなるのであんまり気にしたことはありません。
No.1
- 回答日時:
>(1)割り込みルーチン中から別のルーチンに飛ばすことは可能でしょうか?
駄目です。割り込みルーチンはCPUの動作の中でも特別なものです。割り込み実行を完遂させずにユーザー(アプリケーション)のルーチンに制御を移行させることは物理的に不可能なのです。
>(2)割り込みルーチンの途中で最後まで処理を終えずに、割り込み先に復帰させることは可能でしょうか?
上記に説明したように不可能です。とにかく割り込み処理は短時間に終了させるのがコツです。
ソフトウェアの設計として、割り込みを効率的に使用するであればOSが絶対必要です。OSの存在しないプログラミングとして
割り込みルーチンでフラグを立てて、後で参照する
というやり方がありますが、デバッグがとてつもなく難しくなります。
割り込み処理の一般的なコーディングは
割り込み
{
割り込み処理
if(割り込みの待ちプロセスはあるか?)
待ちプロセスの起動ルーチンの実行(wake up)
retuen
}
となります。
WindowsやLinuxのアプリケーションのプログラマなら良いのですが、組み込みシステムを設計するなら
最低限のOS(モニター)
を設計できないプログラマー(エンジニア)は3流以下です。駄目人間は決まって、CPUの実行速度が遅いだのメモリが足りないだの文句を吐きます。まともな設計ができない人ほどね。今までそんな駄目プログラマーの相手をしてどれほど時間を無駄にしたやら・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Arduino UNO のC言語 2 2023/04/18 19:42
- SoftBank(ソフトバンク) ソフトバンクエア 5 2022/08/26 13:32
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- ゴミ出し・リサイクル ゴミ処理場について。 4 2023/05/06 20:22
- JavaScript Typescript が必要な理由 1 2023/01/07 11:45
- リフォーム・リノベーション 減価償却後の農作業倉庫の壁修理費 確定申告 1 2022/12/24 12:49
- 運輸業・郵便業 タクシー運転手はどうしてあんなにゴミなのか? 4 2022/11/13 20:43
- 電車・路線・地下鉄 学割の理由を何にしたらいいでしょうか 3 2023/03/02 20:10
- その他(悩み相談・人生相談) 帰りはいつもバスを使って帰宅するのですが バス停で起きた事です。 ヘルプマークをリュックに付けた高校 2 2022/04/14 14:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
pic 複数の割り込み関数 切り分...
-
PICでのプログラムによるチャタ...
-
Excelでタイマーの一時停止する...
-
raspberry pi の 割り込み原因...
-
スーパーのレジで並んでいたら...
-
一定時間操作がなかったら、と...
-
PICマイコン 割り込み実行時間...
-
プリントスクリーンの自動化
-
VB.net 割り込みの禁止
-
マイコン C言語 割り込み処理...
-
インバウンドで迷惑している人...
-
H8/3052F/IRQを使った割り込み
-
電車で待機列の割り込みについ...
-
Macターミナルで実行中のプログ...
-
VBAの配列サイズとメモリに関して
-
緯度、経度の 10進法と 60進法...
-
C言語で、メモリを解放しないで...
-
TCP/IP通信時のサーバーからの受信
-
バックグラウンドのプロセスの...
-
プログラミング ソースコード
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CPUの処理量を減らすコーデ...
-
pic 複数の割り込み関数 切り分...
-
【組込み】割り込み中のstatic...
-
USJでの割り込み
-
CPU負荷率の安全な上限と計...
-
ウォッチドッグタイマ(WDT)の...
-
電車乗車時、並んでいるのに割...
-
USB機器からのデータ受信による...
-
一定時間操作がなかったら、と...
-
Amazonfireタブレットにわから...
-
マイコン C言語 割り込み処理...
-
PICマイコンでエンコーダパルス...
-
電車で待機列の割り込みについ...
-
駅のトイレでナイチンに邪魔さ...
-
実行した後、どうしてもフリー...
-
電車のドアの前での並び方
-
V.B.6 多重Call用スプール作成...
-
H8マイコンでの割り込み(シリ...
-
VB.net 割り込みの禁止
-
割り込みについて
おすすめ情報