- ベストアンサー
割り込みの入り方。考え方。
今研修で秋月のH8のキットを使って勉強をしているのですが 割り込みについて理解できないところがあります。 タイマ割り込みなどの割り込みとは メインの関数をよんでいる時に割り込んで今まで実行していたのに変わって実行されるわけですよね? そのタイミングなんですが ファイルを実行させるとソースの上から読むってのはわかるんですけど 例えば5行目の途中とかでも割り込みが行われるんですか? つまり行単位で実行していてその間にはいってくるのか 行の中の単語?をよんでる最中に割り込んでくるのか。。。 知識が無いためうまく説明できませんがわかりますでしょうか? よろしくおねがいします
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
他の回答者が言っていることを要約するだけですが CPUは機械語(アセンブリ言語)で書かれたプログラムを実行しています。 せっかくH8マイコンの動くボードをお持ちなのですから、アセンブリ言語とはどういうものか、理解しましょう。 割り込みについては、その理解、知識が無い方には説明は非常に難しいです。
その他の回答 (4)
- jacta
- ベストアンサー率26% (845/3158)
> こうゆうプログラムにタイマかなんかで割り込むとき > 上もしくは下の行の実行が終わった時に割り込まれるのか > > 上もしくは下の行の実行が終わって次の行を読み始めた途中でも割り込みが発生するのかどうかって事です。 この場合は、行の途中でも割り込みが入ります。 秋月のどのボードを使っているのかわかりませんが、コンパイラにGCCを使っているのであれば、 h8300-hms-gcc -S -mh オプション ファイル名 とすれば、アセンブリ言語のソースが出力されるので、それを見るとよくわかります。 まず、代入すべき値(ここでは0x01や0xfe)をレジスタに読み込んで、その値を出力ポートに書き込んでいるはずです。 P5.DR.BYTEの定義次第では、さらに複雑な命令に展開されているはずです。
- jacta
- ベストアンサー率26% (845/3158)
詳細は補足していただくのを待つとして、わかる範囲で書いてみます。 H8/300Hの場合、ほとんどの命令は不分割ですが、一つだけ例外があります。それはEEPROM命令でワード単位の転送を行う場合です。この命令に限り、命令の実行が終わる前でも割り込みが入り、命令が中断されます。 それ以外は、1つの命令の実行が終わるまで、割り込みは入りません。 C言語での行単位の話であれば、C言語の場合、コンパイラが受け付けてくれる限り(翻訳限界まで)、同じ行にいくらでも式をかけますし、たった一つの代入しかしていないように見えても、実は多くの命令が実行されている場合があります。 機械語レベルで、命令が複数になれば、当然その間に割り込みが入ってきます。割り込みが入ってまずいのであれば、明示的に割り込みを禁止する必要があります。
- ymmasayan
- ベストアンサー率30% (2593/8599)
割りこみは機械語の一命令語の終了のタイミングで行われます。 割りこんだ側が戻ってきたときの先頭番地を保存します。 割りこみ処理が終わると先ほど保存した次実行の先頭番地から続けて何事も無かったように 実行が再開されます。 こう言う関係ですからお同じデータエリアを2つのプログラムが共有することはまずありえません。
- jacta
- ベストアンサー率26% (845/3158)
> 例えば5行目の途中とかでも割り込みが行われるんですか? 5行目というのがよくわからないのですが、アセンブリ言語でプログラムを書いていますか?それともC言語ですか?
補足
すいません。5行目とはたとえで何でもないです。 ちなみに言語はCです。 用は。 void main(void){ P5.DR.BYTE =0x01; (上) P5.DR.BYTE =0xfe; (下) } こうゆうプログラムにタイマかなんかで割り込むとき 上もしくは下の行の実行が終わった時に割り込まれるのか 上もしくは下の行の実行が終わって次の行を読み始めた途中でも割り込みが発生するのかどうかって事です。 言葉、知識が足らなくてすみません;;
お礼
アドバイスありがとうございます。 アセンブリも少し勉強したいと思います。