• 締切済み

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

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

みんなの回答

  • nta
  • ベストアンサー率78% (1525/1942)
回答No.1

過去の書籍ですがCQ出版社のインターフェース誌に関連の特集が掲載され、一生懸命読みました。結論からいって、Windowsはリアルタイム性を全く保証しないため、開発現場で動作しても客先で動作することを保証できません。したがってご質問の件は実機で現場の条件の中でしか測定できません。 これはWindows 2000や9xのことであり、WindowsにはEmbeddedのバージョンがあり、こちらはある程度のリアルタイム性を確保することができるらしいので研究してみてください。 http://www.cqpub.co.jp/interface/download/if9906/download.htm http://www.cqpub.co.jp/interface/toku/200112/if12_toku1.htm http://www.cqpub.co.jp/interface/toku/200010/toku1_3.htm

関連するQ&A

  • 割り込みハンドラの処理の簡素化

    iTronのマルチタスク環境でのデバイスドライバの開発を行っています。 ハードウェアからの割り込み処理について、割り込みハンドラの処理はなるべく簡素化し、すぐに処理を終えた方がよいということを聞きました。 これは、いったいなぜなのでしょう?優先度が高いためシステム全体の性能が落ちるからでしょうか? 詳細をご存知の方がいらっしゃいましたら、よろしくお願いします。

  • ネイティブコード開発言語

    お世話になります。 組み込み系のWindowsアプリを勉強の為に書いてみようと思っていますが、どんな開発言語を選択したらよいか、困っています。 以下のようなことがしたいのですが、何か良いものはありますでしょうか? ・Windowsベース ・PCIバス上のデータ、メモリ上のデータ等を高速に処理したい。 ・中間言語に落とす形式は起動時間や動作速度が推定しにくく避けたい ・GUIプログラミングもしたいし、デバイスドライバも書きたい

  • Windowsのアプリ開発と、リアルタイムOSへの組込み開発、注意すべき点や特徴ってなんでしょう?

    若輩プログラマーです。 Windowsの業務アプリケーション(オープン、Web)開発と、リアルタイムOSへの組込み開発の経験があるのですが、いつも上位モジュール(アプリ層)の開発だったせいかそれぞれの特徴が良く分かりませんでした。 リアルタイムOSというと、割り込みがどうとか、タスクがどうとか、メモリがどうとか。。。でもこれって、Windowsアプリでも注意しないといけない点って同じですよね? そこでご質問です、 Windowsのアプリ開発と、リアルタイムOSへの組込み開発、注意すべき点や特徴ってなんでしょう?

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

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

  • 割り込み処理のシミュレート

    現在開発している組み込み系システムのシミュレートをVCで行いたいと考えています。 組み込み系のシステムは簡単に言うと、 普段はメインループでくるくる回っており、1ms毎にタイマ割り込みが発生し、変数の値を書き換え、メインループではその変数の変化によって何か処理を実行するというものです。 このようなシステムをVCでできるだけ同じようにシミュレートするため、マルチスレッドを用いようと考えているのですが、以下の性質を実現することは可能でしょうか? ・メインスレッド実行中はタイマ割り込みスレッドは割り込み可能。 ・タイマ割り込みスレッド実行中はメインスレッドは割り込んでこない。 ・メインスレッドで特定の区間タイマ割り込みスレッドの割り込みを禁止できる。 ・高速シミュレートを行いたいため、割り込みの禁止などはできるだけ低負荷で行いたい。(ミリ秒単位だとNG) ・複数の割り込みスレッドがある場合、各スレッドごとに割り込みレベルを設け、このレベル以下を割り込み禁止など行いたい。 スレッド以外の実現方法などあればそちらもご教授願いたいです。 よろしくお願いします。

  • サービスルーチンの実行の流れ

    (c)ある処理を実行中に割込が発生してから、対応するサービスルーチンを実行し、元の処理に復帰するまでの一般的な処理の流れを説明せよ。 (1)プログラムの実行 (2)割り込み要求 (3)状態の退避 プロセッサは入出力装置の応答を待たずに実行中のプログラムをいったん停止して、他のプログラムを実行する。 (4)割り込み処理 元のプログラムに入出力動作が指定されると、OSに処理を依頼する。OSは入出力動作を起動し、他のプログラムに制御を渡す。 (5)状態の復元 入出力装置からの動作完了割り込みがあったとき状態を復元 (6)プログラムの再開 OSは入出力処理を実行後、元のプログラムの実行を再開する。 と6段階のフローにして考えてみました。合っていますでしょうか?

  • 画像処理のプログラムでカメラが認識されない

    画像処理のプログラムを組んでいるのですが、どうやってもUSBカメラが認識されなくて困っています。 もちろん、きちんとUSBカメラのドライバを入れていますし、プログラムにも問題点やおかしいところは見当たりませんでした。 また、プログラムのほうでカメラのデバイスを直接指定したのですが、まったくカメラを認識しません・・・。 そこで調べてみると、カメラを接続してもマイコンピュータのほうにカメラのデバイスが接続されたと表示されないことがわかりました。 しかしキャプチャソフトで調べてみるとちゃんとUSBカメラのほうからの映像が入力されていました。(認識されているのか?) これらから詳しく調べてみると、どうやらプログラムのほうでパソコンにつけているビデオ機器の入力用のカードのほうからの入力を認識しているようでした。 この場合どうすればいいのでしょうか? ちなみにプログラミング環境、カメラは OS:windows Vista メモリ:3GB CPU:1.86GHz×2(デュアルコア) カメラ:logicool Qcam® Connect プログラミング言語:C# です。 どなたかよろしくお願いします。

  • 組み込みでの画像処理

    こんにちは 最近組み込みプログラミングについて勉強し始めました初心者ですので、質問に稚拙な部分等があっても目をつぶっていただけるとありがたいです。 今まで、スタンドアローンのPCで画像処理(OpenCVを使用)をしたことがあるのですが、組み込み機器上で画像処理を行う場合にもOpenCVは使用できるのでしょうか? また使用できない場合は、どのように画像処理を行うのでしょうか? お答えよろしくお願いいたします。

  • 組込みC開発

    お世話になります。 組込みでARMコアのCPUをチョイスしての仕事を任されました。 開発ツールはKeilというIDEで、C言語でOS使用しないで開発をしています。 C言語はかれこれ2年以上使用しており、文法上の事などはほぼマスター しており、上記のIDEでソースをコンパイルしてコンパイルエラーもなく 60kbytesほどのコードが生成されます。 ただ、このプログラムをターゲットCPUへダウンロードして使うと コードとは異なる動きをするときがあります。 これは、小規模なプログラムでは経験したことの無いことです。 たとえば、思った動きにならないときに、ソースを少しいじっただけで 今度は例外が発生して止まったりします。 割込みは内部タイマー、外部(ボタン等)、UARTなど計4種類を 設定していますが、どうもこのあたりが怪しいと考えています。 たとえばUARTでPCからデータを送って、ボタンを押す、などの アクションを起こすと、データアボートやプリフェッチアボート が発生したりしますので。 ちなみに、割込み処理は、IDEがサンプルソースでつけているものを includeして使っています。 また、CでのプログラムでMISRA-C参考書も購入してチェックして おります。 大規模なプログラミングは今回が初めてなのですが、こうもソース を少しさわっただけで、例外が発生したりする(コード上問題ない と考えています)ので、現状は記述の仕方を変えてみたりして 対応しています。 こうした規模の大きい組込み系でのプログラミングで、注意する点 や、常識的な部分があればお教えいただきたく思います。 よろしくお願いいたします。

  • 組込みOS

    いつもお世話になっています。 組込み分野によく、OSを搭載するという話を聞きます。 私自身、Keilという会社のIDEであるμVisionという統合開発環境を使って、ARM7TDMIコアCPUのプログラムをC言語で書いています。特に、グラフィックLCDを使ったので、1ライン(8bit)を書くのに費やす時間を極限まで(自分でできる限り^^;)縮小して、メインのループの邪魔にならないように、処理しました。 OSを使えば、タスク処理ができるとの情報を得て、興味がわき、調べてみました。LCDを使ってたので、処理を個別に記述して、あとはタスクに任せれば、メインのループ処理とのかねあいをあまり気にせずプログラミングできるのではないかとの漠然とした考えからです。 私の使用しているCPU自体は、どうやらOSというものを搭載することができるそうなのですが、OSを使用してののプログラミングのイメージがつかみにくい、またそもそもOSとはバイナリで提供され、それをCPUへダウンロードするのか? 等々、いろいろな本を買い漁ったり(会社経費^^;)、WEBを探したりしましたが、やはり漠然としかわからないままでいてます。 OSを使って開発するというのは、いま私が使用しているKeil開発環境以外のものを使って開発・デバッグするということでしょうか? また気軽にOSを入れて(?)プログラミングができるようなお試し環境などあるのでしょうか? せめて、「こういう本読め」のようなご意見でもかまいませんので、よろしくご指導お願いいたします。