• 締切済み

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

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

みんなの回答

回答No.2

最近の組み込み系は、不案内なんですが、 割り込みコントローラは使用しないのですか。 割り込み判定が、タイマーだけみたいですが、 これでは、応答速度に、問題があるのでは。 シミューレートだから使用できないとうことかも知れませんが。 だとすると、その組み込みシステム用に、 きちんとしたシミューレータを作成する必要があるのでは。

Ryo0617
質問者

お礼

回答ありがとうございます。 できればどのパソコン上でも動かせるシミュレータが作りたかったので、割り込みコントローラの使用などは考えていませんでした。

  • gentoo314
  • ベストアンサー率41% (15/36)
回答No.1

思いつくまま書いてみますので、検討してみてください。 マルチメディアタイマーを使うと比較的安定した間隔で、別スレッドからコールバック関数がコールされます。 これがタイマー割り込みハンドラに該当する。 ハンドラの入り口で、自身より下位のスレッドをサスペンドし、出口でレジュームする。割り込みのシミュレートね。割り込みを2本以上作るなら、タイミング問題が出るので、スレッドの操作をクリティカルセクションで排他したほうがよい。 メインスレッドで排他したい箇所には、排他用のクリティカルセクションをかける。ハンドラ側はスレッド操作の内側にクリティカルセクションをかける。

Ryo0617
質問者

お礼

回答ありがとうございます。 割り込みスレッド実行時にメインループスレッドに対してサスペンド処理を行ったところ、私のやり方では25msくらいの時間がかかりました。これでは1msタイマなどのシミュレートには使用できませんでした。やり方が悪いのかwindowsではこれが限界なのかわかりませんが、いろいろ試してみたいと思います。

関連するQ&A

専門家に質問してみよう