(57)【要約】【課題】割込み優先度順に割込み処理が実行でき、割込み処理実行までの時間を短縮できる組み込みボードエミュレータを提供する。【解決手段】  ＣＰＵエミュレータ部は、割込み要求と割込み優先度とが対応付けられて記述されているテーブルである割込みテーブルを参照して、割込み優先度の高い順に前記割込み要求に対応する割込み処理を実行する。デバイスエミュレート部は、発生したイベントに対応するデバイスのエミュレートを、デバイスの割込み優先度の高い順に実行し、実行したデバイスのエミュレートに対応するイベントの個数が設定値を超えるまで、イベントに対応するデバイスのエミュレートを実行し、実行したデバイスのエミュレートにおいて割込み要求が発生した場合は、当該割込み要求とその割込み優先度を前記割込みテーブルに記述し、その後前記ＣＰＵエミュレータ部に割込み処理を実行させる。【選択図】図１
2015197835.tif 000002
【特許請求の範囲】
【請求項１】
デバイスとそのデバイスについての割込み優先度を対応付けた情報を記憶する記憶手段と、
割込み要求と割込み優先度とが対応付けられて記述されているテーブルである割込みテーブルを参照して、割込み優先度の高い順に前記割込み要求に対応する割込み処理を実行するＣＰＵエミュレータ手段と、
発生したイベントに対応するデバイスのエミュレートを、デバイスの割込み優先度の高い順に実行し、実行したデバイスのエミュレートに対応するイベントの個数が設定値を超えるまで、イベントに対応するデバイスのエミュレートを実行し、実行したデバイスのエミュレートにおいて割込み要求が発生した場合は、当該割込み要求とその割込み優先度を前記割込みテーブルに記述し、その後前記ＣＰＵエミュレータ手段に割込み処理を実行させるデバイスエミュレート手段と
を有する組み込みボードエミュレータ。
【請求項２】
前記割込みテーブルは、割込み優先度の高い順に、割込み要求と当該割込み要求の割込み優先度とが対として記録されたレコードを格納している、
請求項１に記載の組み込みボードエミュレータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書に記載の実施の形態は、組み込みボードエミュレータに関する。
【背景技術】
【０００２】
近年、様々なシステムが開発され、これらのシステムではそれぞれに求められる機能や性能、信頼性に対する要求から、専用の組み込みボードを用いることが多い。組み込みソフトウエアは、この専用ハードウエア上で機能や性能、信頼性を満たすよう実装されている。
【０００３】
組み込みソフトウエアを開発する上で、実際の組み込みボードを利用することなく組み込みソフトウエアをＰＣ上で動作させて、実機無しでテストできるようにする実機レステスト環境が利用されるようになってきている。実機レステスト環境によれば組み込みボードの完成を待たずに組み込みソフトウエアのテストができる。また、広域な分散開発拠点間で常に最新のテスト環境を容易に共有することができる、ハードウエア故障時のテストが容易にできる等のメリットもある。
【０００４】
このような実機レステスト環境を構築するには、組み込みボードのエミュレータである「組み込みボードエミュレータ」が利用されるようになってきた。「組込みボードエミュレータ」は、ＣＰＵエミュレーションとデバイスエミュレーションをシリアライズしたエミュレータである（例：QEMU）。組込みボードエミュレータが実行するエミュレーションには大きく分けて２つの処理がある。一つはＣＰＵエミュレーションであり、もう一つはデバイスエミュレーションである。ＣＰＵエミュレーションでは、割込みに対する処理とプログラム実行などが行われる。デバイスエミュレーションは、ソフトウェアのみでエミュレートする場合とホストＰＣのデバイスを利用する場合がある。ホストＰＣのデバイスを利用するケースでは、ホストＰＣからのイベントに対するデバイスエミュレータ起動と、その結果としてのＣＰＵへの割込み登録をおこなう。
シングルスレッドシングルコアでデバイスエミュレーションを行うことを前提とした場合、下記の動作となる。
【０００５】
ホストＰＣからの１つのイベントでは、１つのデバイスエミュレータが起動され、その結果として割込みが１つだけ登録される。複数のイベントが同時に発生する可能性があるため、対応するデバイスエミュレータを順番に起動する。それらに対する割込みも順次登録される。登録された割込みはＣＰＵエミュレータ側で優先度順に処理される。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平１１−３２７９５４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
従来の組み込みボードエミュレータでは、ホストＯＳからの1つのイベントに対して1つのデバイスが起動され、その結果として割込みが1つだけ登録される。実機でのｍ個のデバイスからの同時割込みが発生する場合、デバイスエミュレーションを同時割込みの数と同数回（ｍ回）を実行しないと、ＣＰＵエミュレーションに処理が戻ってこなかった。
【０００８】
そのため、しばらくＣＰＵエミュレーションが行えない状態となり、その結果、（１）割込みが処理されない、（２）アプリケーションコードの実行ができない。この結果、割込み処理の対応が遅くなり、エミュレータと外部デバイスのインタラクションに以下の様な問題が発生していた。
（１）組み込みボードエミュレータのレスポンスが遅くなる
（２）組み込みボードエミュレータの動きが実機の動きと離れる
図１２に、実機での動作時間と、従来の組み込みボードエミュレータの動作時間の比較を示す。
【０００９】
図示の例において、実機ではイベント１、イベント２、イベント３が図１２に示すタイミングで発生しているものとする。従来の組み込みボードエミュレータは、はイベント１、イベント２、イベント３が実機と同様のタイミングで発生することをシミュレートする。
【００１０】
実機では、イベント１に応じて、デバイス１の処理が行われ、その結果割込み優先度２の割込み要求２が発生する。また、イベント２に応じて、デバイス２の処理が行われ、その結果割込み優先度１の割込み要求１が発生する。さらに、イベント３に応じて、デバイス３の処理が行われ、その結果割込み優先度３の割込み要求３が発生する。
【００１１】
ＣＰＵは、割込み優先度の高い割込み要求を優先して実行するため、先ず割込み優先度１であるデバイス２の割込み要求２を実行し、次に割込み優先度２であるデバイス１の割込み要求１を実行する。
【００１２】
一方、従来の組み込みボードエミュレータにおいて、イベント１に応じて、仮想デバイス１の処理が行われ、その結果割込み優先度２の割込み要求２が発生する。また、イベント２に応じて、仮想デバイス２の処理が行われ、その結果割込み優先度１の割込み要求１が発生する。さらに、イベント３に応じて、仮想デバイス３の処理が行われ、その結果割込み優先度３の割込み要求３が発生する。
【００１３】
従来の組み込みボードエミュレータでは、全ての仮想デバイスの処理が終了するの待って、それぞれの割込み要求に対応する割込み処理が実行されるため、実機に比べて割込み処理開始の遅延が生じている。
【００１４】
本発明の目的は、割込み優先度順に割込み処理が実行でき、割込み処理実行までの時間を短縮できる組み込みボードエミュレータを提供することにある。
本発明の別の目的は、リアルハード（実機）に近い動きを模擬でき、割込み処理が効率的に行える組み込みボードエミュレータを提供することにある。
【課題を解決するための手段】
【００１５】
本発明の実施の形態は組み込みボードエミュレータとして提案される。この組み込みボードエミュレータは、登録手段と、ＣＰＵエミュレータ手段と、デバイスエミュレータ手段とを有する。
記憶手段は、デバイスとそのデバイスについての割込み優先度を対応付けた情報を記憶する。
【００１６】
ＣＰＵエミュレータ手段は、割込み要求と割込み優先度とが対応付けられて記述されているテーブルである割込みテーブルを参照して、割込み優先度の高い順に前記割込み要求に対応する割込み処理を実行する。
【００１７】
デバイスエミュレート手段は、発生したイベントに対応するデバイスのエミュレートを、デバイスの割込み優先度の高い順に実行し、実行したデバイスのエミュレートに対応するイベントの個数が設定値を超えるまで、イベントに対応するデバイスのエミュレートを実行し、実行したデバイスのエミュレートにおいて割込み要求が発生した場合は、当該割込み要求とその割込み優先度を前記割込みテーブルに記述し、その後前記ＣＰＵエミュレータ手段に割込み処理を実行させる。
【図面の簡単な説明】
【００１８】
【図１】実施の形態に係る組み込みボードエミュレータの構成例を示す機能ブロック図
【図２】デバイスリストのデータ構成例を示す図
【図３】割込みテーブルのデータ構成例を示す図
【図４】実施の形態に係る組み込みボードエミュレータの主要動作の例を示したフローチャート
【図５】デバイス登録処理の一例を示したフローチャート
【図６】ＣＰＵエミュレーション処理の一例を示すフローチャート
【図７】デバイスエミュレーション処理の例を示すフローチャート
【図８】従来の組み込みボードシミュレータの処理時間と、本組み込みボードエミュレータにおいて割込み優先度順にソートせず、最大イベント数の値を「１」とする設定を採用した場合の処理時間の比較を示す図
【図９】従来の組み込みボードシミュレータの処理時間と、本組み込みボードエミュレータにおいて割込み優先度順にソートせず、最大イベント数の値を「１」とする設定を採用した場合の処理時間の比較を示す
【図１０】従来の組み込みボードシミュレータの処理時間と、本組み込みボードエミュレータにおいて割込み優先度順にソートするが、最大イベント数の値を「１」とする設定を採用した場合の処理時間の比較を示す図
【図１１】実機における処理時間と、本実施の形態に係る組み込みボードエミュレータの処理時間との比較を示す図
【図１２】実機での動作時間と、従来の組み込みボードエミュレータの動作時間の比較を示す
【発明を実施するための形態】
【００１９】
以下、図面を参照して本発明の実施の形態に係る組み込みボードエミュレータを説明する。
【００２０】
［０．用語の定義］
本明細書中で使用する用語の定義を述べる。
［０．１．仮想マシン］
「仮想マシン」とは、エミュレーション対象のコンピュータをいう。
【００２１】
［０．２．ＣＰＵエミュレータ］
「ＣＰＵエミュレータ」とは、実ＣＰＵの動きを模擬する部（構成要素）をいう。
【００２２】
［０．３．デバイスエミュレータ］
「デバイスエミュレータ」とは、実デバイスを模擬する部（構成要素）をいう。
【００２３】
［０．４．イベント］
「イベント」とは、アプリケーションまたはOS（Operating System）で起こる仮想マシン上の割込みとなり得るアクションまたは状況の変化をいう。
【００２４】
［０．５．イベントテーブル］
「イベントテーブル」とは、起こりうるイベントのリストで、イベントの状況（当該イベントが起こったかどうかを示す情報）を表すテーブルである。
【００２５】
［０．６．割込み］
「割込み」とは、仮想マシンの割込みをいう。あるイベントに対するデバイスエミュレータの処理結果として登録されるイベントに対して、行うべき処理を実施するために、現在のプロセスから抜けて、割込みハンドラに飛ぶ。
【００２６】
［０．７．割込みハンドラ］
「割込みハンドラ」とは、イベントに対する処理をいう。
【００２７】
［０．８．割込みテーブル］
「割込みテーブル」とは、要求される割込みのリストであって、割込みの状況（要求されたかどうかを示す情報）を表すテーブルをいう。
【００２８】
［１．実施の形態］
本発明の実施の形態は、組み込みボードエミュレータとして提案される。この組み込みボードエミュレータは、実際の組み込みボードを利用することなく組み込みソフトウエアをＰＣ上で動作させて、実機無しでテストできるようにする装置である。
【００２９】
本実施の形態にかかる組み込みボードエミュレータは、コンピュータ、ワークステーション、サーバなどの情報処理装置によって実現される装置であって、情報処理装置は、演算処理装置（ＣＰＵ）、主メモリ（ＲＡＭ）、読み出し専用メモリ（ROM）、入出力装置（Ｉ／Ｏ）、及び必要な場合にはハードディスク装置等の外部記憶装置を具備している装置である。
【００３０】
［１．１．構成例］
本発明の実施の形態に係る組み込みボードエミュレータの構成について説明する。図１は、本実施の形態に係る組み込みボードエミュレータの構成例を示す機能ブロック図である。なお、機能ブロック図中に示す構成要素は、組み込みボードエミュレータの機能を機能ごとにまとめてブロックとして捉えたものであり、組み込みボードエミュレータが各構成要素に対応する基板、装置、回路、部品などの物理的構成要素を備えていなければならないことを意味するわけではない。また、「接続」とは、データ、情報、命令などの送信及び／又は受信、受け取り、受け渡しなどが可能な状態になっていることをいい、互いに配線で連結されているような物理的な接続に限られる意味ではない。本明細書中の他の構成要素の機能ブロック図の説明についても同様である。
【００３１】
ＰＣ，ワークステーションなどの情報処理装置に、ホストＯＳ部３０と、ゲストＯＳ部２０と、組み込みボードエミュレータ１０が搭載されている。ホストＯＳ部３０は、仮想マシン（仮想コンピュータ）環境で仮想的なOSを動作させている（土台となっている）ＯＳに相当する。ゲストＯＳ部２０は、コンピュータ上に別のコンピュータ環境を用意する「仮想マシン」環境で、仮想マシン上で動作しているＯＳに相当する。
ホストＯＳ部３０は、上記情報処理装置に接続された複数の実デバイス３１を制御している。
【００３２】
ゲストＯＳ部２０は、組み込みボードエミュレータ１０のエミュレーション対象である実行コードであるアプリケーションを記憶する、アプリケーション記憶部２１と、初期化部２２を有している。初期化部２２は、割込み優先度設定部３００が記憶している割込み優先度を初期値に書き換える機能を有する。
【００３３】
組み込みボードエミュレータ１０は、ＣＰＵエミュレータ部１００と、デバイスエミュレータ部２００と、割込み優先度設定部３００と、イベントテーブル記憶部４００と、イベント繰り返し回数設定部５００と、割込みテーブル記憶部６００を有している。
ＣＰＵエミュレータ部１００は、アプリケーション記憶部２１と割込みテーブル記憶部６００に接続されている。ＣＰＵエミュレータ部１００は、本実施の形態のＣＰＵエミュレータ手段に相当する。
【００３４】
デバイスエミュレータ部２００は、ＣＰＵエミュレータ部１００と、デバイスエミュレータ部２００と、割込み優先度設定部３００と、イベントテーブル記憶部４００と、イベント繰り返し回数設定部５００と、割込みテーブル記憶部６００とに接続されている。デバイスエミュレータ部２００は、本実施の形態のデバイスエミュレータ手段に相当する。
【００３５】
［１．１．１．ＣＰＵエミュレータ部］
ＣＰＵエミュレータ部１００は、実ＣＰＵの動作を模倣する機能を有する。
【００３６】
［１．１．２．デバイスエミュレータ部］
デバイスエミュレータ部２００は、実デバイス３１を模倣する機能を有する。
デバイスエミュレータ部２００は、デバイスリスト記憶部２１０と、処理済みイベント数記憶部２３０と、割込みコントローラ部２２０とを有している。
【００３７】
デバイスリスト記憶部２１０は、デバイスを特定する情報（例えば「デバイス名」）と当該デバイスについての割込み優先度を対とするレコードを記述したデータであるデバイスリストを記憶する。図２に、デバイスリストのデータ構成例を示す。デバイスリスト２４０は、デバイスごとに一のレコードを有し、各レコードは、デバイスを特定する情報（例えば「デバイス名」）を格納するフィールド２４１と、当該デバイスについての割込み優先度を格納するフィールド２４２を有している。デバイスエミュレータ部２００は、デバイスリスト２４０が有するレコードを、割込み優先度が高いレコードがより上位となるようにデバイスリスト２４０の更新等を行う。この例では、割込み優先度が最上位であるレコードが、最上部のレコードとして書き込まれており、以下、割込み優先度が高い順に下位に向かって並べられている。デバイスリスト記憶部２１０は、本実施の形態の記憶手段に相当する。
【００３８】
割込みコントローラ部２２０は、割込みテーブル記憶部６００に記憶されている割込みテーブルと、デバイスリスト記憶部２１０に記憶されているデバイスリストを参照して、どの割込み要求を優先して実行するかを判定する。
【００３９】
処理済みイベント数記憶部２３０は、デバイスエミュレータ部２００が処理したイベントの数（処理済みイベント数と呼ぶ）を記憶する。一つのイベントを処理する毎に処理済みイベント数は一だけ増加される。処理済みイベント数が、設定されているイベント繰り返し回数を超えると、処理済みイベント数は初期値（この例の場合は０）に戻される。
【００４０】
［１．１．３．イベントテーブル記憶部］
イベントテーブル記憶部４００は、起こり得るイベントのリストでそれぞれのイベントが起こったかどうかを示す情報を記述したデータであるイベントリストを記憶する。
【００４１】
［１．１．４．割込みテーブル記憶部］
割込みテーブル記憶部６００は、割込み番号とその割込みの優先度である割込み優先度と、状況を関連付けて記述したデータである割込みテーブルを記憶する。図３に割込みテーブルのデータ構成例を示す。割込みテーブル４１０は、一つの割込み要因について一つのレコードを有し、各レコードは割込み要因を示す情報（ここでは割込み番号）を格納するフィールド４１１と、その割込み要因に起因する割込みの優先度を格納するフィールド４１２と、その割込みの状況（割込みが実行されたか否か）を示す情報を格納するフィールド４１３を有する。
【００４２】
［１．１．５．割込み優先度設定部］
割込み優先度設定部３００は、ユーザからの入力に応じて、デバイスとそのデバイスに設定された割込み優先度をデバイスリストに書き込む。
【００４３】
［１．１．６．イベント繰り返し回数設定部］
イベント繰り返し回数設定部５００は、ユーザから入力されたイベント繰り返し回数の値を受け付け、その値を記憶する。「イベント繰り返し回数の値」は本実施の形態の設定値に相当する。
【００４４】
［１．２．動作例］
本実施の形態に係る組み込みボードエミュレータ１０動作例を説明する。
［１．２．１．主要動作］
本実施の形態に係る組み込みボードエミュレータ１０の主要動作の例を説明する。図４は、本実施の形態に係る組み込みボードエミュレータ１０の主要動作の例を示したフローチャートである。組み込みボードエミュレータ１０は、起動するとまずデバイス登録処理（Ｓ１０）を実行する。
【００４５】
［１．２．１．１．デバイス登録処理］
デバイス登録処理（Ｓ１０）は、デバイスの割込み優先度を設定する処理である。図５に、デバイス登録処理の一例を示したフローチャートを掲げる。
【００４６】
デバイス登録処理において、ユーザは割込み優先度設定部３００に、新たに登録するデバイスである新デバイスを一意に特定する情報（例えば、デバイス名、デバイス番号、デバイスＩＤなど）、割込み優先度からなるデバイスエントリー情報を入力する（Ｓ１１０）。入力されたデバイスエントリー情報はデバイスリスト２４０に追加される。
【００４７】
割込み優先度設定部３００は、割込みテーブル記憶部６００に記憶されている割込みテーブルを参照して、新デバイスが処理する割込みの優先度である割込み優先度を確認する（Ｓ１２０）。デバイスからの割り込みは、デバイス種類に応じて割り込みテーブル上での割り込み番号と対応することになるので、デバイスの特定は割り込みテーブルの割り込み番号から行える。割り込み番号が同じデバイス（ＵＳＢデバイスなど）については、割り込み優先度も同じなので登録の仕方には問題がなく、デバイス登録時は同じ割り込み優先度中で、登録順に並ぶことになる。
【００４８】
次に割込み優先度設定部３００は、現デバイスを特定する（Ｓ１３０）。「現デバイス」とは、デバイス登録処理において、新デバイスと対比する対象となるデバイスである。なお、現デバイスの初期値は、デバイスリストの最上位に登録されているデバイスが設定される。
【００４９】
次に、割込み優先度設定部３００は、デバイスリストを参照して、新デバイスの割込み優先度と現デバイスの割込み優先度とを比較し、新デバイスの割込み優先度が現デバイスの割込み優先度新デバイスの割込み優先度より高いか否かを判定する（Ｓ１４０）。
【００５０】
ステップＳ１４０において、新デバイスの割込み優先度が現デバイスの割込み優先度新デバイスの割込み優先度より高いと判定した場合（Ｓ１４０、Ｙｅｓ）、割込み優先度設定部３００はデバイスリストの現デバイスに対応するレコードの前に、新デバイスに対応するレコードを挿入する（Ｓ１５０）。その後、割込み優先度設定部３００はデバイス登録処理を終了する。
【００５１】
一方、ステップＳ１４０において、新デバイスの割込み優先度が現デバイスの割込み優先度新デバイスの割込み優先度より高くないと判定した場合（Ｓ１４０、Ｎｏ）、割込み優先度設定部３００は、現デバイスを次デバイスに変更する（Ｓ１６０）。「次デバイス」とは、デバイスリストにおける現デバイスに対応するレコードの次のレコードに対応するデバイスである。
【００５２】
次に割込み優先度設定部３００は、デバイスリストにおいて、ステップＳ１６０で現デバイスとしたデバイスに対応するレコードが、デバイスリストの最後のレコード（最も低い割込み優先度が設定されているレコードである）か否かを判定する（Ｓ１７０）。
【００５３】
ステップＳ１７０において、現デバイスのレコードがデバイスリストの最後のレコードではないと判定した場合（Ｓ１７０、Ｎｏ）、割込み優先度設定部３００は前述のステップＳ１４０に戻る。
【００５４】
一方、ステップＳ１７０において、現デバイスのレコードがデバイスリストの最後のレコードであると判定した場合（Ｓ１７０、Ｙｅｓ）、割込み優先度設定部３００はデバイスリストを参照して、新デバイスの割込み優先度と現デバイスの割込み優先度とを比較し、新デバイスの割込み優先度が現デバイスの割込み優先度新デバイスの割込み優先度より高いか否かを判定する（Ｓ１８０）。
【００５５】
ステップＳ１８０において、新デバイスの割込み優先度が現デバイスの割込み優先度新デバイスの割込み優先度より高いと判定した場合（Ｓ１８０、Ｙｅｓ）、割込み優先度設定部３００は前述のステップＳ１５０に進み、デバイスリスト中のの現デバイスに対応するレコードの前に、新デバイスに対応するレコードを挿入する（Ｓ１５０）。その後、割込み優先度設定部３００はデバイス登録処理を終了する。
【００５６】
一方、ステップＳ１８０において、新デバイスの割込み優先度が現デバイスの割込み優先度新デバイスの割込み優先度より高くないと判定した場合（Ｓ１８０、Ｎｏ）、割込み優先度設定部３００は、デバイスリスト中のの現デバイスに対応するレコード（このステップでは最後のレコード）の後に、新デバイスに対応するレコードを挿入する（Ｓ１９０）。その後、割込み優先度設定部３００はデバイス登録処理を終了する。
以上で、デバイス登録処理が終了する。
【００５７】
［１．２．１．２．ＣＰＵエミュレーション処理］
図４に戻り、組み込みボードエミュレータ１０の主要動作例の説明を続ける。デバイス登録処理（Ｓ１０）の後、組み込みボードエミュレータ１０はＣＰＵエミュレーション処理（Ｓ２０）を実行する。ＣＰＵエミュレーション処理は、一定時間にアプリケーションコードや割込みに対しての処理を行う処理である。図６に、ＣＰＵエミュレーション処理（Ｓ２０）の一例を示すフローチャートを示す。
ＣＰＵエミュレーション処理において、ＣＰＵエミュレータ部１００は、ＣＰＵエミュレータの入口となるコードの行に移行する（Ｓ２１０）。
【００５８】
次にＣＰＵエミュレータ部１００は、割込みテーブル記憶部６００に記憶された割込みテーブルをチェックして割込みが発生しているか否かを調べる（Ｓ２２０）。
ＣＰＵエミュレータ部１００は、ステップＳ２２０における割込みテーブルチェックの結果から割込み要求があるか否かを判定する（Ｓ２３０）。
【００５９】
ステップＳ２３０において、割込み要求はないと判定した場合（Ｓ２３０、Ｎｏ）、ＣＰＵエミュレータ部１００はＣＰＵエミュレーション処理を終了する。一方、ステップＳ２３０において、割込み要求があると判定した場合（Ｓ２３０、Ｙｅｓ）、ＣＰＵエミュレータ部１００は割込みハンドラでの処理を実行する（Ｓ２４０）。その後ＣＰＵエミュレータ部１００は、ステップＳ２４０で処理した割込み要求を削除するように割込みテーブルの書き換えを行う（Ｓ２５０）。その後ＣＰＵエミュレータ部１００はステップＳ２１０に戻り、ＣＰＵエミュレーション処理を続行する。
以上でＣＰＵエミュレーション処理の説明を終了する。  
【００６０】
［１．２．１．３．デバイスエミュレーション処理］
図４に戻り組み込みボードエミュレータ１０の主要動作の説明を続ける。ＣＰＵエミュレーション処理（Ｓ２０）実行後、組み込みボードエミュレータ１０、より詳しくはデバイスエミュレータ部２００はデバイスエミュレーション処理（Ｓ３０）を実行する。デバイスエミュレーション処理（Ｓ３０）は、イベントテーブルに記述された最初のｎ個（ｎは任意の自然数）のイベントに対するデバイスの処理を行う処理である。デバイスエミュレーション処理において、デバイスエミュレータ部２００は、割込み優先度順にデバイスエミュレーションを行い、デバイスエミュレーションを行うごとに処理済みイベント数記憶部（イベントカウンタ）の値をインクリメントし、n個のイベント処理ができたら、ＣＰＵエミュレーション処理（Ｓ２０）に戻る。図７にデバイスエミュレーション処理（Ｓ３０）の例を示すフローチャートを掲げる。
【００６１】
デバイスエミュレーション処理において、デバイスエミュレータ部２００は現デバイスのエミュレーションを実行する（Ｓ３１０）。なお、デバイスエミュレーション処理を開始する際に、初期値の設定が行われる。「現デバイス」、「イベントカウンタ」、「最大イベント数数」のそれぞれについて初期値が設定される。「現デバイス」の初期値はデバイスリスト中の第１のデバイスに設定される。第１のデバイスとは、デバイスリスト中最も割込み優先度が高いデバイスである。「イベントカウンタ」の初期値は「０」に設定される。「最大イベント数数」の初期値はユーザ等によって指定された値「ｎ」が設定される。
【００６２】
ステップＳ３１０の後、デバイスエミュレータ部２００は、イベントテーブル記憶部４００に記憶されているイベントテーブルをチェックする（Ｓ３２０）。イベントテーブルは、イベントを特定する情報である「イベント番号」と、そのイベントが起きたか否かを示す情報である「状況」とを対として記述したデータである。
【００６３】
ステップＳ３２０の後、デバイスエミュレータ部２００は、イベントテーブルを参照していずれかのイベントが発生したか否かを判定する（Ｓ３３０）。ステップＳ３３０においていずれのイベントも発生していないと判定した場合（Ｓ３３０、Ｎｏ）、デバイスエミュレータ部２００は「現デバイス」を次デバイスに変更する（Ｓ３４０）。次デバイスとは、デバイスリストにおいて現デバイスの次に高い割込み優先度を設定されているデバイスである。ステップＳ３４０実行後、デバイスエミュレータ部２００は前述のステップＳ３２０に戻り、デバイスエミュレーション処理を続行する。
【００６４】
一方、ステップＳ３３０においてステップＳ３３０においていずれかのイベントが発生していると判定した場合（Ｓ３３０、Ｙｅｓ）、デバイスエミュレータ部２００は、発生したイベントに対応する処理を実行する（Ｓ３５０）。
ステップＳ３５０の後、デバイスエミュレータ部２００は処理済みイベント数記憶部２３０（イベントカウンタ）の値を１つインクリメントする（Ｓ３６０）。
【００６５】
ステップＳ３６０の後、デバイスエミュレータ部２００は割込みを行うか否かを判定する（Ｓ３７０）。ステップＳ３７０において割込みを行うと判定した場合（Ｓ３７０、Ｙｅｓ）、デバイスエミュレータ部２００は割込みテーブルをアップデートする（Ｓ３８０）。
【００６６】
ステップＳ３８０の後、デバイスエミュレータ部２００はイベントカウンタの値が最大イベント数の値「ｎ」を超えたか否かを判定する（Ｓ３９０）。ステップＳ３９０の判定において、イベントカウンタの値が「最大イベント数」の値「ｎ」を超えたと判定した場合（Ｓ３９０、Ｙｅｓ）、デバイスエミュレータ部２００はデバイスエミュレーション処理を終了する。一方、イベントカウンタの値が最大イベント数の値「ｎ」を超えていないと判定した場合（Ｓ３９０、Ｎｏ）、デバイスエミュレータ部２００は前述のステップＳ３４０に戻り、デバイスエミュレーション処理を続行する。
以上でデバイスエミュレーション処理の説明を終了する。
【００６７】
図４に戻り組み込みボードエミュレータ１０の主要動作の説明を続ける。デバイスエミュレーション処理終了後、組み込みボードエミュレータ１０はＣＰＵエミュレーション処理（Ｓ２０）に戻り、主要動作を続行する。以降、主要動作の中断命令等があるまでＣＰＵエミュレーション処理（Ｓ２０）とデバイスエミュレーション処理（Ｓ３０）が繰り返し実行される。
以上で組み込みボードエミュレータ１０の主要動作の説明を終了する。
【００６８】
［３．従来の組み込みボードシミュレータとの比較］
以下に、従来の組み込みボードシミュレータとの比較を示す。
［３．１．デバイスリストをソートせず、最大イベント数を制限する場合］
従来の組み込みボードシミュレータと、本組み込みボードエミュレータにおいて割込み優先度順にソートせず、最大イベント数を「１」とする場合（本実施の形態の技術的範囲には含まれない）を比較する。図８に従来の組み込みボードシミュレータの処理時間と、本組み込みボードエミュレータにおいて割込み優先度順にソートせず、最大イベント数の値を「１」とする設定を採用した場合（本実施の形態の技術的範囲には含まれない）の処理時間の比較を示す。
【００６９】
図８の例において、従来の組み込みボードエミュレータではイベント１、イベント２、イベント３が図に示すタイミングで発生しているものとする。本組み込みボードエミュレータは、従来の組み込みボードエミュレータと同様のタイミングでイベント１、イベント２、イベント３が発生することをシミュレートする。
【００７０】
従来の組み込みボードエミュレータにおいて、イベント１に応じて、仮想デバイス１の処理が行われ、その結果割込み優先度２の割込み要求２が発生する。また、イベント２に応じて、仮想デバイス２の処理が行われ、その結果割込み優先度１の割込み要求１が発生する。さらに、イベント３に応じて、仮想デバイス３の処理が行われ、その結果割込み優先度３の割込み要求３が発生する。従来の組み込みボードエミュレータでは、全ての仮想デバイスの処理が終了するの待って、割込み要求２及び割込み要求１に対応する仮想デバイス２および仮想デバイス１の割込み処理が実行される。
【００７１】
一方、本組み込みボードエミュレータにおいて割込み優先度順にソートせず、最大イベント数の値を「１」とする設定を採用した場合（本実施の形態の技術的範囲には含まれない）では、イベント１に応じて仮想デバイス１の処理を実行し、割込み要求２が発せられると、仮想ＣＰＵはこの割込み要求２に応じて仮想デバイス１の割込み処理を実行する。その後、イベント１の後に発生していたイベント２に応じて仮想デバイス２の処理を実行し、割込み要求１が発せられると、仮想ＣＰＵはこの割込み要求１に応じて仮想デバイス２の割込み処理を実行する。
この例の設定における本組み込みボードエミュレータは、割込み優先度に従った割込み処理の順番を守ることができない。
［３．２．デバイスリストをソートするが、最大イベント数を制限しない場合］
【００７２】
従来の組み込みボードシミュレータと、本組み込みボードエミュレータにおいて割込み優先度順にソートしているが、最大イベント数による制限をしない場合（本実施の形態の技術的範囲には含まれない）を比較する。図９に従来の組み込みボードシミュレータの処理時間と、本組み込みボードエミュレータにおいて割込み優先度順にソートせず、最大イベント数の値を「１」とする設定を採用した場合（本実施の形態の技術的範囲には含まれない）の処理時間の比較を示す。
【００７３】
図９の例において、従来の組み込みボードエミュレータではイベント１、イベント２、イベント３が図に示すタイミングで発生しているものとする。本組み込みボードエミュレータは、従来の組み込みボードエミュレータと同様のタイミングでイベント１、イベント２、イベント３が発生することをシミュレートする。
【００７４】
従来の組み込みボードエミュレータにおいて、イベント１に応じて、仮想デバイス１の処理が行われ、その結果割込み優先度２の割込み要求２が発生する。また、イベント２に応じて、仮想デバイス２の処理が行われ、その結果割込み優先度１の割込み要求１が発生する。さらに、イベント３に応じて、仮想デバイス３の処理が行われ、その結果割込み優先度３の割込み要求３が発生する。従来の組み込みボードエミュレータでは、全ての仮想デバイスの処理が終了するの待って、割込み要求２及び割込み要求１に対応する仮想デバイス２および仮想デバイス１の割込み処理が実行される。
【００７５】
一方、本組み込みボードエミュレータにおいて割込み優先度順にソートするが、最大イベント数による制限をしない設定を採用した場合（本実施の形態の技術的範囲には含まれない）では、イベント１に続いてイベント２が発生している。イベント２の割込み優先度がイベント１の割込み優先度より高いため、イベント２に対応する仮想デバイス２の処理がまず実行され、この処理によって割込み要求１が発生する。その後、割込み要求１に応じた割込み処理を行うことなく、イベント２の前に発生していたイベント１に応じて仮想デバイス１の処理を実行し、割込み要求２が発せられる。その後全ての仮想デバイスの処理が実行された後に、仮想ＣＰＵは割込み優先度の高い仮想デバイス２の割込み処理を実行し、続いて仮想ＣＰＵは、次に割込み優先度の高い仮想デバイス１の割込み処理を実行する。
【００７６】
この例の設定における本組み込みボードエミュレータは、割込み優先度に従った割込み処理の順番を守ることはできるが、割込み処理が完了するまでの時間を短縮することができない。
【００７７】
［３．３．デバイスリストをソートし、かつ最大イベント数を制限する場合］
次に、従来の組み込みボードシミュレータと、本組み込みボードエミュレータにおいて割込み優先度順にソートし、かつ最大イベント数を「１」とする場合（本実施の形態の技術的範囲に含まれる）を比較する。図１０に従来の組み込みボードシミュレータの処理時間と、本組み込みボードエミュレータにおいて割込み優先度順にソートするが、最大イベント数の値を「１」とする設定を採用した場合の処理時間の比較を示す。
【００７８】
図１０の例において、従来の組み込みボードエミュレータではイベント１、イベント２、イベント３が図に示すタイミングで発生しているものとする。本組み込みボードエミュレータは、従来の組み込みボードエミュレータと同様のタイミングでイベント１、イベント２、イベント３が発生することをシミュレートする。
【００７９】
従来の組み込みボードエミュレータにおいて、イベント１に応じて、仮想デバイス１の処理が行われ、その結果割込み優先度２の割込み要求２が発生する。また、イベント２に応じて、仮想デバイス２の処理が行われ、その結果割込み優先度１の割込み要求１が発生する。さらに、イベント３に応じて、仮想デバイス３の処理が行われ、その結果割込み優先度３の割込み要求３が発生する。従来の組み込みボードエミュレータでは、全ての仮想デバイスの処理が終了するの待って、割込み要求２及び割込み要求１に対応する仮想デバイス２および仮想デバイス１の割込み処理が実行される。
【００８０】
一方、本実施の形態に係る組み込みボードエミュレータにおいて割込み優先度順にソートするが、最大イベント数の値を「１」とする設定を採用した場合（本実施の形態の技術的範囲には含まれない）では、イベント１に続いてイベント２が発生している。イベント２の割込み優先度がイベント１の割込み優先度より高いため、イベント２に対応する仮想デバイス２の処理がまず実行され、この処理によって割込み要求１が発生する。仮想ＣＰＵはこの割込み要求１に応じて仮想デバイス２の割込み処理を実行する。その後、イベント２の前に発生していたイベント１に応じて仮想デバイス１の処理を実行し、割込み要求２が発せられると、仮想ＣＰＵはこの割込み要求２に応じて仮想デバイス１の割込み処理を実行する。
【００８１】
この例の設定における本組み込みボードエミュレータは、割込み優先度に従った割込み処理の順番を守ることができるとともに、割込み処理時間が従来の組み込みボードエミュレータに比べて短縮できる。
図１１に、実機における処理時間と、本実施の形態に係る組み込みボードエミュレータの処理時間との比較を示す。
【００８２】
実機では、イベント１に応じて、デバイス１の処理が行われ、その結果割込み優先度２の割込み要求２が発生する。また、イベント１の後に発生したイベント２に応じて、デバイス２の処理が行われ、その結果割込み優先度１の割込み要求１が発生する。さらに、イベント３に応じて、デバイス３の処理が行われ、その結果割込み優先度３の割込み要求３が発生する。
【００８３】
ＣＰＵは、割込み優先度の高い割込み要求を優先して実行するため、先ず割込み優先度１であるデバイス２の割込み要求２を実行し、次に割込み優先度２であるデバイス１の割込み要求１を実行する。
一方、本実施の形態に係る組み込みボードエミュレータの処理時間は、図１０に示した例の場合と同様である。
【００８４】
［４．利点］
本実施の形態によれば、割込み優先度順に割込み処理が実行でき、割込み処理実行までの時間を短縮できる組み込みボードエミュレータを提供することが可能となる。
本実施の形態によれば、リアルハード（実機）に近い動きを模擬でき、割込み処理が効率的に行える組み込みボードエミュレータを提供することが可能となる。
【００８５】
本実施の形態において、デバイスエミュレーション処理で処理するイベント数（ｎ）を制限する結果、割込みを要求した際に、全てのデバイスの処理が完了する前に、割込み要求に対応するため、割込み処理が実行されるまでの時間を短くすることができる。
また、本実施の形態において、デバイスリストの割込み優先度順のソーティングの結果、割込み優先度が高い割込みの処理から行うことを可能としている。
【００８６】
［５．まとめ、その他］
以上、本発明の実施の形態を説明したが、本発明はこれらに限定されるものではなく、発明の趣旨を逸脱しない範囲内において、種々の変更、追加、組み合わせ等が可能である。
【符号の説明】
【００８７】
１０・・・組み込みボードエミュレータ；  ２０・・・ゲストＯＳ部；  ２１・・・アプリケーション記憶部；  ２２・・・初期化部；  ３０・・・ホストＯＳ部；  ３１・・・実デバイス；  １００・・・ＣＰＵエミュレータ部；  ２００・・・デバイスエミュレータ部；  ２１０・・・デバイスリスト記憶部；  ２２０・・・割込みコントローラ部；  ２３０・・・処理済みイベント数記憶部；  ３００・・・割込み優先度設定部；  ４００・・・イベントテーブル記憶部；  ５００・・・イベント繰り返し回数設定部；  ６００・・・割込みテーブル記憶部；
【図１】
2015197835.tif 000003
【図２】
2015197835.tif 000004
【図３】
2015197835.tif 000005
【図４】
2015197835.tif 000006
【図５】
2015197835.tif 000007
【図６】
2015197835.tif 000008
【図７】
2015197835.tif 000009
【図８】
2015197835.tif 000010
【図９】
2015197835.tif 000011
【図１０】
2015197835.tif 000012
【図１１】
2015197835.tif 000013
【図１２】
2015197835.tif 000014