• 締切済み

組み込みソフトウェアの割り込みについて、

今組み込みソフトウェアについて、勉強している物です。 割り込みについて、分からないため質問させていただきます。 割り込みをする際は、何らかの操作により、割り込みカウンタにビットが入り、 それにより、PCに割り込みアドレスを入れられ、割り込み処理が実行されるとの事ですが、 何らかの操作により、割り込みカウンタにビットが入り、それに検出がよくわからないです。 ポーリングで、カウンタの値を見ている訳ではないのに、どうやって検出するのでしょうか? 私の解釈、憶測では、カウンタをハードウェアでポーリングしており、そのためソフトウェアでは意識する必要がないのでは?と認識しております。

みんなの回答

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.3

>私の解釈、憶測では、カウンタをハードウェアでポーリングしており、そのためソフトウェアでは意識する必要がないのでは?と認識しております。 その通りですよ。基本的にCPUは命令が終わるごとに外部割込みが入っていないか判定するようになっています。それが「割り込みカウンタ」の読み取りか、割込み信号線のハイローチェックか、そのほかの方法かはCPU次第でしょうけど。 現在のCPUでは複数命令を同時実行(スーパースカラー)したり、内部では順不同に実行(アウトオブオーダー)したりする機能を持っているものもあってより複雑になっていますが、ソフトウェアからみたときにはある命令までは実行済みでその次の命令が実行される前に割込みが発生したことになるように調整されます。 # ただし非常に長い時間が掛かる複雑な命令では途中で割込みが発生できるものもあります なお、ゼロ除算例外、アドレス違反例外のようなプログラムの実行に起因して発生する例外は外部割込みとは異なるタイミングで発生するので注意ください。 # これらが発生すると実行中の命令を完了できないので外部割込みと同じタイミングでは処理できない

全文を見る
すると、全ての回答が全文表示されます。
  • ok-kaneto
  • ベストアンサー率39% (1798/4531)
回答No.2

そうですね。「割り込み」は分かりますか? 「割り込み」は色々なレベルの割り込みがあって、それに応じて処理を振り分けられます。 ハードウェア割り込みやソフトウェア割り込みがありますが、これらはCPUの機能としてあります。 http://ja.wikipedia.org/wiki/%E5%89%B2%E3%82%8A%E8%BE%BC%E3%81%BF_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

どんなソフトで、どんなことを言っているのか、 よくわからないのですが。 大抵は、割り込みの大本はハードウエアが多いですよ。 で、そこから割り込まれた後、 割り込みベクターに登録された”順”にコールしていく システムが多いです。 以前の作り方では、CPUが遅かったので、 割り込みベクター(通称INTやNMI)は1つだけで、終わらせるように 作っていましたが、CPUが高速化してきたため、 複数のコールベクターを、本来の割り込みベクターから、呼び出し そこから、ポーリングセレクティブ(または全部)するように、今は 作り方が変わってきています。 ちなみ、これは、裸のシステムでの話ですが、 すでに稼動しているシステムでの話ですか??

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 基本情報処理技術者試験 質問

    プログラムを実行中に、スーパーバイザコールなどの割込みが入ったとき、「プログラムカウンタの値やレジスタの値が一時退避し、割り込みの処理が終わったらその値は戻ってくる」とテキストに書いてありました。 割り込み発生時のプログラムカウンタやレジスタの値の退避先ってどこになるんでしょうか?

  • OSの割り込みについて

    以下の各々の割り込みについて。 必要な処理を、なぜ他の方法ではなく、割り込みを通してOSに行ってもらうのか? よくわからなかったので、どなたか教えてください。 ・ハードウェアの誤り検出 ・入出力処理終了の報告 ・タイマ ・外部信号割り込み ・ソフトウェアの誤り検出 ・ページフォールト/アドレス変換例外 ・システムコール/カーネルコール

  • Ethernetコントローラについて

    Ethernetコントローラの開発をしてます。 ようやくPHYと通信をすることはできるようになったのですが、受信が上手くできません。 ただ送信はできています。 EtherCの割り込み要因レジスタのビットが0のままでフレーム受信の割り込みがきていないようです。 他の割り込みの場合はちゃんとビットが1になります。 このような場合、原因はハードウェアにあるのでしょうか? 原因を探しているのですがソフトウェアが原因でない可能性があると思うので教えて下さい。

  • SH2 (SH7144)のソフトウェアスタンバイ

    初めて質問します。 マイコン初心者なので宜しくお願いします。 SH-7144で、ソフトウェアスタンバイをIRQ3から解除したいのですが、うまくいきません。 環境は、HEWを使ってます。 実験中の為コメント付きの汚いコードになってますが、あらかじめ失礼します。 以下コードです。 // スリープ時の処理を設定 SBYCR.BIT.SSBY = 0x01; // SLEEP 命令実行後、ソフトウェアスタンバイモードに遷移 //SBYCR.BIT.HIZ = 0x01; // ソフトウェアスタンバイモード時に、端子状態をハイインピーダンス SBYCR.BIT.HIZ = 0x00; // デバッグ用 //SBYCR.BIT.IRQEH = 0x01; // IRQ7~4 ソフトウェアスタンバイモードの解除を無効にする SBYCR.BIT.IRQEH = 0x00; // デバッグ用 SBYCR.BIT.IRQEL = 0x00; // IRQ3~0 ソフトウェアスタンバイモードの解除を有効にする //INTC.ICR1.BIT.IRQ3S = 0x00; //INTC.ICR2.BIT.IRQ3ES = 0x00; INTC.ICR1.BIT.IRQ3S = 0x01; INTC.ICR2.BIT.IRQ3ES = 0x00; INTC.IPRA.BIT._IRQ3 = 0xF; ~~~~~~~~~中略~~~~~~~~~~~ // 42PIN を Port A.PA9 から IRQ3 として使用する PFC.PACRL1.BIT.PA9MD = 0x02; //INTC.IPRH.BIT._WDT = 0xF; WDT.WRITE.TCSR = 0xA55F; // WT/IT = 1, TME = 0, CKS2,1,0 = 0 //WDT.WRITE.RSTCSR = 0x5A5F; sleep(); 以上コードでした。 //INTC.ICR1.BIT.IRQ3S = 0x00; //INTC.ICR2.BIT.IRQ3ES = 0x00; INTC.ICR1.BIT.IRQ3S = 0x01; INTC.ICR2.BIT.IRQ3ES = 0x00; の部分ですが、本来IRQ3がローの時にスタンバイ解除したかったのですが、 ハードウェアマニュアルの低消費電力状態の項目には、立ち上がり・立ち下がりエッジでの表現しかなかったため上記のような状態になりました。 WDTのみでパワーオンリセットが出来る事と、IRQ3だけで割り込みが出来る事は確認出来たのですが、どうしてもスタンバイの解除が出来ません。 それと、スタンバイの解除が出来た場合は、WDT同様にパワーオンリセットになると考えて宜しいでしょうか。 アドバイス等でも宜しいのでお願いします。

  • 割り込みベクタの機能と実現方法

    (d)割込ベクタの機能と実現方式を説明せよ。 (1)機能 割り込みには、ハードウェア割り込み、ソフトウェア割り込みがあるが、割り込みベクタによって、どのような割り込みが発生したかが分かるようになっている。割り込みの発生要因によって、実行される処理(割り込みハンドラーと呼ばれたりサービスルーチンと言われる)はシステムによって決められている。 (2)実現方法 ベクタテーブルを作成する必要がある。以下それについて具体的に説明する。 多数の割り込み要因がある場合,それぞれに対応する割り込みサービス・ルーチンを作っておく必要がある.そして,割り込み要求信号が発生したときには,要求を出している要因に応じて,正しい割り込みサービス・ルーチンを呼び出さなければならない.そのために用いられるのが割り込みベクタ・テーブルである.それぞれの割り込み要因は,割り込みが受け付けられると,割り込み元を示す番号(割り込みベクタ)を送信する.メモリの中には,この番号と割り込みサービス・ルーチンの先頭アドレス(あるいはそのアドレスへの分岐命令)を対応付けた表(テーブル)を用意しておく.この対応表を,割り込みベクタ・テーブルと呼ぶ.  割り込みは元のソフトウェアの実行を強制的に中断してしまう.このため,特に中断されたくない処理を実行している場合には,その間だけ割り込みを禁止にする機能がある.  また,割り込み要因の中には,割り込み要求を常時有効にしたい要因もあるが,特定の局面でだけ有効にしたい要因もある.そのため,各割り込み要因ごとに,割り込みの受付を無効にする割り込みマスクの機能がある.割り込みマスクで無効にできる割り込みはマスカブル割り込み,割り込みマスクで無効にできない割り込みをノン・マスカブル割り込み(NMI)と呼ぶ.  特に緊急性が高い割り込みにはNMIを用いる. いかがでしょうか? 実現方法のところが答えられていますでしょうか?

  • 64ビットに対応したソフトウェアはどのように作られるのですか?

    64ビットに対応したソフトウェアはどのように作られるのですか? 64ビットの環境(CPU-OS)では64ビット向けに開発したプログラムが効率よく実行(速い)できるということですが、実際に64ビットに適したプログラムとはどのように開発するでしょうか? 私自身はプログラマでもなく開発する人間ではないので的外れな質問かも知れませんが可能な範囲でお答えいただければありがたいです。 ・コーディングの時点でメモリの使い方のような「プログラマの意識や手腕」に拠る。つまり、プログラマのスキルによって「64ビット対応」の程度が違うということがあるでしょうか?それとも、ある一定の規則に沿って32ビット向けとは違う書き方をするだけで自ずと64ビット化となるのでしょうか?(前者のイメージは、64ビットをフルに使うように随所で職人的な技術を要するのか、デジタルではっきりと32/64の区別がつくのでしょうか) ・プログラムは外観上(何かのファイルのプロパティを見たり、もしくはリバースエンジニアリングをするようなことで)はっきりと64ビットプログラムか否かというのが分かるものでしょうか。 ・64ビット専用のプログラムは32ビット環境では動かないということですが、何がネックとなり動作できないのでしょうか?(因みに最初の質問は、カッチリとした64ビット専用以外に、中途半端に64ビット指向のソフトがあるのでしょうか?という考えからです) よろしくお願いします。

  • 割り込みハンドラの間隔に関して

    組み込み機器の開発をしております。割り込みをCPUに通知してからそれをOSが認識するまでの間隔はどのぐらいと見積もればよいかを教えて頂きたく思っております。 その間隔が長ければ多くのバッファリングメモリを実装しなくてはならないので見積もりが必要です。 なお、組み込み機器なのでプログラミングが可能です。また、本人はハードウェアエンジニアに付き、ソフト開発の経験が有りません。従い勘違いをしている点があるかも知れないので、その際は訂正の程、宜しくお願いいたします。 1) windowsのプログラミングにおいて、割り込み間隔の設定はどのレベルでチューニングされるのでしょうか?OSレベルで定義されているのか、もしくはデバイスドライバが認識するのか? 2) OSが割り込みを認識する間隔の最小時間はどのぐらいなのでしょうか? 3) 割り込み認識の間隔は常にほぼ一定であり、状況によって遅れることは無いと考えてよいのでしょうか? 4) 割り込み通知を受けてから割り込み処理ルーチンが実行されるまでのタイムラグはどのぐらいでしょうか?(immediate に実行されると考えてよいのでしょうか?) 5) 割り込み通知を受けてから割り込み処理ルーチンが実行されるまでのタイムラグは、割り込み処理ルーチンが既に起動されている場合は、優先度に応じて、処理されるまでの時間は保証されないのでしょうか? 6) 通常のデバイスドライバなどでは割り込みハンドラの間隔に関してどのような仮定に基づいているのでしょうか? 7) この辺の議論をより正確に理解するためにweb上、もしくは書籍の情報源として最適なものを教えて頂けませんでしょうか? 以上宜しくお願いいたします。

  • snmp counter64 を計算する方法

    いつもお世話になります ちょっとしたNW機器のCPU負荷をMRTGで表示しようとしています。 snmpで得られる値が、実行ステップ数とトータルステップ数を counter64 で返すようになっています。 そのため、シェルスクリプトで計算した結果を mrtgに取り込ますようにしたいと考えています。 64bitの数値をスクリプト内で処理させると、 桁あふれしているようで、単純に値を代入しただけでも、 値が変わってしまうようです。 何かうまい方法をご存知ありませんでしょうか。

  • USB端子

    ハードウェアとしてUSB端子の存在が認識されているのに カメラなど接続しても、応答がありません。 ハードウェア検出を実行しても、USBケーブルの先に あるハードについて認識してくれません。 多分壊れているのでしょうが、この端子のみ自力で (電器屋さんに修理を頼まずに)直すことは可能で しょうか? また、その場合に費用はどのくらいかかるでしょうか?

  • ハードウェア化すると速い?

    最近ハードウェアに関する本を読んでいるんですが、ソフトウェア上で実行するアプリケーションをハードウェア化にすると高速に実行できるって書いてあります。 それはなぜですか?ソフト上では1クロックのCPUで1命令しか実行できないに対して、ハードウェアでは数命令もできるらしいですが、具体的にまだよく理解できないです。 特に最近FPGAとかを使用するとハードウェア化を実現可能ですって。。 でも、1命令でパイプライン処理するとソフト上でも数命令できると思います。 この辺はよくご存じる方がいれば是非教えてください。 よろしくお願いします。

専門家に質問してみよう