(57)【要約】【課題】組込ソフトウェアの開発の際に精度よく品質保証を行うことのできる開発プログラムを提供する。【解決手段】所定の動作を行う実機に組み込まれる組込プログラムを開発する手段として、コンピュータを機能させる開発プログラム１であって、実機のデバイスドライバにかえて、組込プログラム１００とのコマンドの送受信を行う擬似デバイスドライバ２２１、および実機の機能にかえて、擬似デバイスドライバ２２１とのコマンドの送受信を行うエミュレータ２３０としてコンピュータを機能させる。【選択図】        図１
2008217574.tif 000002
【特許請求の範囲】
【請求項１】
所定の動作を行う実機に組み込まれる組込プログラムを開発する手段として、コンピュータを機能させる開発プログラムであって、
前記実機のデバイスドライバにかえて、前記組込プログラムとのコマンドの送受信を行う擬似デバイスドライバ、および
前記実機の機能にかえて、前記擬似デバイスドライバとのコマンドの送受信を行うエミュレータとしてコンピュータを機能させることを特徴とする開発プログラム。
【請求項２】
前記擬似デバイスドライバを搭載したオペレーションシステム、および
前記オペレーションシステムと異なるオペレーションシステムに搭載するための互換機としてさらにコンピュータを機能させることを特徴とする請求項１に記載の開発プログラム。
【請求項３】
前記擬似デバイスドライバとのコマンドの送受信を行い、かつ前記エミュレータとのコマンドの送受信を行うエミュレータ用デバイスドライバとしてさらにコンピュータを機能させることを特徴とする請求項１または２に記載の開発プログラム。
【請求項４】
前記エミュレータは、実機のエンジンを制御するエンジン制御プログラムとして前記エミュレータ用デバイスドライバとコマンドの送受信を行うことを特徴とする請求項３に記載の開発プログラム。
【請求項５】
前記エミュレータにイベント発生を通知するアプリケーションとしてさらにコンピュータを機能させ、
前記エミュレータは、前記イベント発生を受信すると、前記エミュレータ用デバイスドライバにコマンドを通知することを特徴とする請求項４に記載の開発プログラム。
【請求項６】
前記エミュレータは、画像処理ＡＳＩＣ（Application  Specific  Integrated  Circuit）として前記エミュレータ用デバイスドライバとコマンドの送受信を行うことを特徴とする請求項３に記載の開発プログラム。
【請求項７】
実機の不揮発性メモリとしてデータを保持する前記エミュレータ、
前記エミュレータから読み出されたデータを保持するファイル、および
前記ファイルに対するデータの書き込みおよび読み出しを行う前記擬似デバイスドライバとしてコンピュータを機能させることを特徴とする請求項１または２に記載の開発プログラム。
【請求項８】
実機の異なるデバイスドライバそれぞれに対応する複数の擬似デバイスドライバ、
前記複数の擬似デバイスドライバそれぞれと、コマンドの送受信を行う複数のエミュレータ用デバイスドライバ、および
前記複数のエミュレータ用デバイスドライバそれぞれと、コマンドの送受信を行う複数のエミュレータとしてコンピュータを機能させることを特徴とする請求項３に記載の開発プログラム。
【請求項９】
所定の動作を行う実機に組み込まれる組込プログラムを開発する手段として、コンピュータを機能させるプログラムを記録した記録媒体であって、
前記実機のデバイスドライバにかえて、前記組込プログラムとのコマンドの送受信を行う擬似デバイスドライバ、および
前記実機の機能にかえて、前記擬似デバイスドライバとのコマンドの送受信を行うエミュレータとしてコンピュータを機能させるためのプログラムを記録したことを特徴とするコンピュータが読取可能な記録媒体。
【請求項１０】
所定の動作を行う実機に組み込まれる組込プログラムを開発する開発装置であって、
前記実機のデバイスドライバにかえて、前記組込プログラムとのコマンドの送受信を行う擬似デバイスドライバ、および
前記実機の機能にかえて、前記擬似デバイスドライバとのコマンドの送受信を行うエミュレータを備えたことを特徴とする開発装置。
【請求項１１】
所定の動作を行う実機に組み込まれる組込プログラムを開発する開発方法であって、
前記実機のデバイスドライバにかえて、前記組込プログラムとのコマンドの送受信を行うステップ、および
前記実機の機能にかえて、前記擬似デバイスドライバとのコマンドの送受信を行うステップを有することを特徴とする開発方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、所定の動作を行う実機に組み込まれる組込プログラムを開発する手段として、コンピュータを機能させる開発プログラム、記録媒体、開発装置および開発方法に関するものである。
【背景技術】
【０００２】
従来、例えばプリンタや、ＦＡＸ、またはこれらの複合機などハードウェア機能を備えた装置に組み込む組込ソフトウェアの開発を行う際には、組込ソフトウェアで必要となるハードウェア処理における動作確認が必要となるなど、品質保証のため実機環境が必要であった。
【０００３】
特許文献１には、実機を必要とせずパーソナルコンピュータ（以下、「ＰＣ」と称する）上でソフトウェアの開発を行うための環境構築方法が開示されている。この方法においては、通信パスクラスが実機レス環境専用のソフトウェアである機能クラスを呼び出すことにより、実機レス環境で組込ソフトウェアの動作を実現している。実機環境においては、通信パスクラスとデバイスドライバとの組み合わせが記述された定義を読み込むことにより通信パスの接続先を設定する。同様に、デバッグの際には、通信パスクラスと機能クラスとの組み合わせが記述された定義を読み込むことにより通信パスの接続先を設定する。これにより、機能クラスまたはデバイスドライバのいずれかを動作環境に合わせて選択して呼び出せるような仕組みを通信パスクラスに設けている。
【０００４】
【特許文献１】特開２００３−２９６１３８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に記載の方法においては、実機環境とデバッグ処理の際とにおいて通信パスクラスの接続先が異なっている。すなわち、通信パスクラスにおける処理は、デバッグ処理の際に実機環境と完全に同一の処理ではない。このため、組込ソフトウェアがデバイスを呼び出す処理の動作確認ができていないという問題がある。
【０００６】
本発明は、上記に鑑みてなされたものであって、組込ソフトウェアの開発の際に精度よく品質保証を行うことのできる開発プログラム、記録媒体、開発装置および開発方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するために、請求項１にかかる発明は、所定の動作を行う実機に組み込まれる組込プログラムを開発する手段として、コンピュータを機能させる開発プログラムであって、前記実機のデバイスドライバにかえて、前記組込プログラムとのコマンドの送受信を行う擬似デバイスドライバ、および前記実機の機能にかえて、前記擬似デバイスドライバとのコマンドの送受信を行うエミュレータとしてコンピュータを機能させることを特徴とする。
【０００８】
また、本発明の他の形態は、所定の動作を行う実機に組み込まれる組込プログラムを開発する手段として、コンピュータを機能させるプログラムを記録した記録媒体であって、前記実機のデバイスドライバにかえて、前記組込プログラムとのコマンドの送受信を行う擬似デバイスドライバ、および前記実機の機能にかえて、前記擬似デバイスドライバとのコマンドの送受信を行うエミュレータとしてコンピュータを機能させるためのプログラムを記録したことを特徴とするコンピュータが読取可能な記録媒体。
【０００９】
また、本発明の他の形態は、所定の動作を行う実機に組み込まれる組込プログラムを開発する開発装置であって、前記実機のデバイスドライバにかえて、前記組込プログラムとのコマンドの送受信を行う擬似デバイスドライバ、および前記実機の機能にかえて、前記擬似デバイスドライバとのコマンドの送受信を行うエミュレータを備えたことを特徴とする。
【００１０】
また、本発明の他の形態は、所定の動作を行う実機に組み込まれる組込プログラムを開発する開発方法であって、前記実機のデバイスドライバにかえて、前記組込プログラムとのコマンドの送受信を行うステップ、および前記実機の機能にかえて、前記擬似デバイスドライバとのコマンドの送受信を行うステップを有することを特徴とする。
【発明の効果】
【００１１】
本発明によれば、実機と同様の環境において、組込ソフトウェアの開発を行うことができ、精度よく品質保証を行うことができるという効果を奏する。
【発明を実施するための最良の形態】
【００１２】
以下に添付図面を参照して、この発明にかかる開発プログラム、記録媒体、開発装置および開発方法の最良な実施の形態を詳細に説明する。
【００１３】
（第１の実施の形態）
図１は、第１の実施の形態にかかるプログラム開発キット１の機能構成を示すブロック図である。ここで、プログラム開発キット１は、開発プログラムに相当する。
【００１４】
本実施の形態にかかるプログラム開発キット１は、例えば、ＦＡＸやプリンタ、スキャナなどの複数の機能が搭載された複合機に組み込まれる組込プログラムであるＪａｖａ（登録商標）プログラム１００を開発する際に利用される。例えば、開発者は自身の利用するパーソナルコンピュータ（ＰＣ）上でプログラム開発キット１を動作させることにより、Ｊａｖａ（登録商標）プログラム１００を開発する。プログラム開発キット１は、ユーザのＰＣに搭載されたＷｉｎｄｏｗｓ（登録商標）上で動作する。
【００１５】
プログラム開発キット１は、ＪＶＭ（Ｊａｖａ（登録商標）  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）２００と、Ｎａｔｉｖｅプログラム２１０と、オペレーションシステム（ＯＳ）２２０と、エミュレータ２３０と、仮想マシン動作ソフトウェア２４０とを備えている。
【００１６】
ＪＶＭ２００は、Ｊａｖａ（登録商標）バイトコードをＯＳ固有のネイティブコードに変換する。Ｊａｖａ（登録商標）プログラム１００は、ＪＶＭ２００を利用することにより、ＯＳやＣＰＵに非依存であることを実現している。Ｎａｔｉｖｅプログラム２１０は、ＯＳやＣＰＵに依存したプログラムである。具体的には、Ｃ言語やＣ＋＋言語で記述されたプログラムである。
【００１７】
ＯＳ２２０は、例えばＬｉｎｕｘ（商標）である。ＯＳ２２０は、擬似デバイスドライバ２２１を有している。擬似デバイスドライバ２２１は、Ｎａｔｉｖｅプログラム２１０とコマンドの送受信を行う。また、エミュレータ２３０とコマンドの送受信を行う。コマンドとしては、データの取得を要求するｒｅａｄと、データを渡すことを要求するｗｒｉｔｅとがある。ＯＳ２２０とエミュレータ２３０の間の通信は、一般的なソケット通信にて実現する。
【００１８】
エミュレータ２３０は、実機におけるＦＡＸやプリンタ、スキャナなどのエンジンにかわってコマンドの送受信を行う。仮想マシン動作ソフトウェア２４０は、Ｗｉｎｄｏｗｓ（登録商標）上でＬｉｎｕｘを動作させるための互換機である。具体的には、Ｖｍｗａｒｅなどがある。
【００１９】
図２は、Ｊａｖａ（登録商標）プログラム１００が実際に搭載される実機１０の機能構成を示す図である。実機１０においては、ＯＳ３２０は、コントローラボード３３０に搭載されている。また、ＯＳ３２０は、擬似デバイスドライバ２２１ではなく、正式デバイスドライバ３２１を有している。
【００２０】
さらに、実機１０は、エンジン側の構成としては、エンジンボード３４０とＯＳ３５０と、エンジン制御プログラム３６０とを備えている。正式デバイスドライバ３２１は、エンジンボード３４０およびＯＳ３５０を介してエンジン制御プログラム３６０とのコマンドの送受信を行う。
【００２１】
このように、実機１０における正式デバイスドライバ３２１は、実際のエンジン系とコマンドの送受信を行うのに対し、実施の形態１にかかる擬似デバイスドライバ２２１は、エンジン系に対応するエミュレータ２３０とコマンドの送受信を行う。
【００２２】
本実施の形態にかかるプログラム開発キット１は、正式デバイスドライバ３２１にかえて擬似デバイスドライバ２２１を有している。この擬似デバイスドライバ２２１は、Ｎａｔｉｖｅプログラム２１０とのコマンドの送受信においては正式デバイスドライバ３２１と同様に動作する。このため、実機からＰＣへの変更に伴うＮａｔｉｖｅプログラム２１０の変更は不要であり、実機に組み込むべきＮａｔｉｖｅプログラム２１０をそのまま利用することができる。
【００２３】
このように、プログラム開発キット１においては、ともにユーザプログラムであるＪａｖａ（登録商標）プログラムがエミュレータと直接通信を行うのではなく、カーネル空間に存在するプログラムである擬似デバイスドライバを経由して直接エミュレータとの通信を行う。これにより、実機に搭載するＪａｖａ（登録商標）プログラムに変更を加えることなく、そのまま動作させることが可能となる。これにより、開発対象プログラムをそのまま実機に組み込むことも可能となる。
【００２４】
図３は、実施の形態１にかかるプログラム開発キット１が展開されるＰＣのハードウェアの構成を示す図である。ＰＣは、ハードウェア構成として、プログラム開発キット１におけるプログラム開発処理を実行する開発プログラムなどが格納されているＲＯＭ５２と、ＲＯＭ５２内のプログラムに従ってプログラム開発キット１の各部を制御するＣＰＵ５１と、実機１０の制御に必要な種々のデータを記憶するＲＡＭ５３と、ネットワークに接続して通信を行う通信Ｉ／Ｆ５７と、各部を接続するバス６２とを備えている。
【００２５】
先に述べたプログラム開発キット１における開発プログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フロッピー（登録商標）ディスク（ＦＤ）、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録されて提供されてもよい。
【００２６】
この場合には、開発プログラムは、プログラム開発キット１において上記記録媒体から読み出して実行することにより主記憶装置上にロードされ、上記ソフトウェア構成で説明した各部が主記憶装置上に生成されるようになっている。
【００２７】
また、本実施の形態の開発プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。
【００２８】
以上、本発明を実施の形態を用いて説明したが、上記実施の形態に多様な変更または改良を加えることができる。
【００２９】
（第２の実施の形態）
図４は、第２の実施の形態にかかるプログラム開発キット２の機能構成を示す図である。プログラム開発キット２は、Ｎａｔｉｖｅプログラム１０１を開発する際に利用される開発プログラムである。プログラム開発キット２は、ＮａｔｉｖｅプログラムおよびＪＶＭを備えず、Ｎａｔｉｖｅプログラム１０１をプログラム開発キット２上で動作させることにより、Ｎａｔｉｖｅプログラム１０１を開発することができる。
【００３０】
なお、第２の実施の形態にかかるプログラム開発キット２のこれ以外の構成および処理は、他の実施の形態にかかるプログラム開発キットの構成および処理と同様である。
【００３１】
（第３の実施の形態）
図５は、第３の実施の形態にかかるプログラム開発キット３の機能構成を示す図である。プログラム開発キット３は、第１の実施の形態にかかるプログラム開発キット１のうちＮａｔｉｖｅプログラムを備えず、Ｊａｖａ（登録商標）プログラム１００およびＮａｔｉｖｅプログラム１０１双方の開発の際に利用することができる。
【００３２】
なお、第３の実施の形態にかかるプログラム開発キット３のこれ以外の構成および処理は、他の実施の形態にかかるプログラム開発キットの構成および処理と同様である。
【００３３】
（第４の実施の形態）
図６は、第４の実施の形態にかかるプログラム開発キット４の機能構成を示す図である。プログラム開発キット４は、仮想マシン動作ソフトウェアを搭載しておらず、専用ＯＳとしてのＬｉｎｕｘを搭載したマシン上に直接配置する。そして、プログラム開発キット４が展開されるＰＣに搭載されているＯＳであるＬｉｎｕｘ上にデバイスドライバ２５０が展開される。このように、プログラム開発において利用されるＯＳと実機のＯＳとが同一である場合には、仮想マシン動作ソフトウェアは不要である。
【００３４】
なお、第４の実施の形態にかかるプログラム開発キット４のこれ以外の構成および処理は、他の実施の形態にかかるプログラム開発キットの構成および処理と同様である。
【００３５】
なお、第４の実施の形態にかかるプログラム開発キット４の変更例としては、デバイスドライバだけでなく、デバイスドライバが組み込まれたＯＳをプログラム開発キット４として提供してもよい。これにより、デバイスドライバがローダブル（カーネルプログラムに動的に追加できる）になっている場合には、デバイスドライバのみを提供し、デバイスドライバをカーネルに予め組み込んでおく必要がある場合には、デバイスドライバが組み込まれたＯＳを提供することができる。
【００３６】
（第５の実施の形態）
図７は、第５の実施の形態にかかるプログラム開発キット５の機能構成を示す図である。プログラム開発キット５は、ＮａｔｉｖｅプログラムおよびＪＶＭを備えず、Ｎａｔｉｖｅプログラム１０１をプログラム開発キット５上で動作させることにより、Ｎａｔｉｖｅプログラム１０１を開発する。プログラム開発キット５は、第４の実施の形態にかかるプログラム開発キット４と同様に、仮想マシン動作ソフトウェアを搭載していない。そして、ＰＣに搭載されているＯＳ上にデバイスドライバ２５０が展開される。
【００３７】
なお、第５の実施の形態にかかるプログラム開発キット５のこれ以外の構成および処理は、他の実施の形態にかかるプログラム開発キットの構成および処理と同様である。
【００３８】
（第６の実施の形態）
図８は、第６の実施の形態にかかるプログラム開発キット６の機能構成を示す図である。プログラム開発キット６は、Ｎａｔｉｖｅプログラムを備えず、Ｊａｖａ（登録商標）プログラム１００およびＮａｔｉｖｅプログラム１０１の双方の開発を行うことができる。プログラム開発キット６は、第４の実施の形態にかかるプログラム開発キット４および第５の実施の形態にかかるプログラム開発キット５と同様に、仮想マシン動作ソフトウェアを搭載していない。そして、ＰＣに搭載されているＯＳ上にデバイスドライバ２５０が展開される。
【００３９】
なお、第６の実施の形態にかかるプログラム開発キット６のこれ以外の構成および処理は、他の実施の形態にかかるプログラム開発キットの構成および処理と同様である。
【００４０】
（第７の実施の形態）
図９は、第７の実施の形態にかかるプログラム開発キット７の機能構成を示す図である。プログラム開発キット７は、Ｎａｔｉｖｅプログラム１０１とのコマンドの送受信を行う擬似デバイスドライバ２６０の他、エミュレータ２３０とのコマンドの送受信を行うエミュレータ用デバイスドライバ２６１を備えている。これにより、擬似デバイスドライバ２６０およびエミュレータ用デバイスドライバ２６１はいずれも１つのユーザプログラムのみとコマンドの送受信を行うことになる。したがって、通信相手がいずれのユーザプログラムであるかを特定する必要がなく、処理の簡素化を図ることができる。
【００４１】
デバイスドライバを用いて通信を行う場合には、メッセージ送信処理は、デバイスドライバへのｗｒｉｔｅ処理となり、メッセージ受信処理はデバイスドライバへのｒｅａｄ処理となる。
【００４２】
例えば、エミュレータ用デバイスドライバ２６１を有さず擬似デバイスドライバ２６０のみがＮａｔｉｖｅプログラム１０１のほかエミュレータ２３０ともコマンドの送受信を行うとする。この場合には、Ｎａｔｉｖｅプログラム１０１とエミュレータ２３０で同時に通信要求が発生した場合の排他処理や、通信要求先に応じてメッセージ通知先を切り替える処理、Ｎａｔｉｖｅプログラム１０１に送信すべきコマンドを誤ってエミュレータ２３０に送信しないための処理などを行うための仕組みを擬似デバイスドライバ２６０に持たせる必要がある。このため、擬似デバイスドライバ２６０の処理が複雑になってしまう。
【００４３】
これに対し、第７の実施の形態にかかるプログラム開発キット７のように、擬似デバイスドライバ２６０の他に、エミュレータ用デバイスドライバ２６１を設けることにより、擬似デバイスドライバ２６０の処理の効率化を図ることができる。
【００４４】
図１０は、エミュレータ２３０の詳細な構成を示すブロック図である。エミュレータ２３０は、主にメインスレッド２３１と、受信スレッド２３２と、送信処理部２３３と、タイマー２３４とを備えている。
【００４５】
受信スレッド２３２は、メインスレッド２３１からはスレッド起動指示を受け付ける。スレッド起動指示を受け付けると、エミュレータ用デバイスドライバ２６１からｒｅａｄ要求が送られてくるのを待つ。そして、ｒｅａｄ要求を受信すると、メインスレッド２３１に受信通知を行う。
【００４６】
メインスレッド２３１は、また、タイマー用のスレッド生成指示によりタイマー２３４を生成する。そして、必要に応じてタイマー２３４に対しタイマー設定を行う。タイマー２３４は、設定された時間が経過するとタイムアップ通知をメインスレッド２３１に返す。このタイマー２３４の処理により、メインスレッド２３１は、例えばｒｅａｄコマンドを受信してから一定期間経過後にｗｒｉｔｅコマンドを返すなどの処理を行うことができる。
【００４７】
メインスレッド２３１は、さらに送信処理部２３３に対し送信要求を送る。さらに、エミュレータ用デバイスドライバ２６１に対しｏｐｅｎコマンドを送信する。
【００４８】
タイマー２３４は、予め設定されたタイマー仕様にしたがい動作する。受信スレッド２３２は、予め設定されたデバイスドライバ受信仕様にしたがい動作する。送信処理部２３３は、デバイスドライバ送信仕様にしたがい動作する。なお、ここで、各スレッドは、非同期に動作可能である。
【００４９】
図１１は、エミュレータ２３０の処理を示すフローチャートである。メインスレッド２３１は、まず、ｏｐｅｎコマンドをエミュレータ用デバイスドライバ２６１に送信し、デバイスファイルをオープンする（ステップＳ１００）。次に、メインスレッド２３１は、タイマー２３４を生成する（ステップＳ１０２）。次に、タイマー２３４は、初期化を行う（ステップＳ１０４）。初期化が完了すると、初期化完了をメインスレッド２３１に通知する（ステップＳ１０６）。次に、メインスレッド２３１は、受信スレッド２３２を生成する（ステップＳ１０８）。受信スレッド２３２は、初期化を行い（ステップＳ１１０）、初期化が完了すると初期化完了をメインスレッド２３１に通知する（ステップＳ１１２）。以上の処理により、受信スレッド２３２は、ｒｅａｄコマンドが送信されるのを待つ状態となる。
【００５０】
この状態において、エミュレータ用デバイスドライバ２６１からコマンドが送信されると、受信スレッド２３２は、イベント発生を認識する（ステップＳ１２０）。そして、イベント発生をメインスレッド２３１に通知する（ステップＳ１２２）。メインスレッド２３１は、イベントに応じた時間のカウントをタイマー２３４に指示する。具体的には、まずタイマー起動を指示する（ステップＳ１２４）。次に、タイマー２３４は、カウントを開始する（ステップＳ１２６）。予め設定された応答時間だけカウントを行うと、指定時間の計測完了をメインスレッド２３１に通知する（ステップＳ１２８）。
【００５１】
次に、メインスレッド２３１は、送信処理部２３３に対し送信実行を指示する（ステップＳ１３０）。送信処理部２３３は、送信実行の指示を取得すると、ｗｒｉｔｅ処理によりエミュレータ用デバイスドライバ２６１にｗｒｉｔｅコマンドを送信する（ステップＳ１３４）。そして、メインスレッド２３１に送信結果を通知する（ステップＳ１３６）。以上で、エミュレータ２３０の処理が完了する。このように、エミュレータ用デバイスドライバ２６１からのｗｒｉｔｅコマンドに対しては、実機のエンジンに相当する時間だけ待ってｒｅａｄコマンドを返すことにより、実機に即した応答を行うことができる。
【００５２】
なお、第７の実施の形態にかかるプログラム開発キット７のこれ以外の構成および処理は、他の実施の形態にかかるプログラム開発キットの構成および処理と同様である。
【００５３】
（第８の実施の形態）
図１２は、第８の実施の形態にかかるプログラム開発キット８の機能構成を示すブロック図である。プログラム開発キット８は、複数種類のエミュレータと、各エミュレータに対応する複数のデバイスドライバとを備えている。具体的には、エミュレータとして、エンジンエミュレータ２７０と、ＮＶＲＡＭエミュレータ２７１と、ＩＰＵ（Ｉｍａｇｅ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）エミュレータ２７２とを有している。また、プログラム開発キット８のＯＳ２２０は、擬似デバイスドライバとして、擬似ＰＣＩ通信ドライバ２２２と、擬似ＮＶＲＡＭドライバ２２３と、擬似ビデオドライバ２２４とを有している。
【００５４】
さらに、擬似ＰＣＩ通信ドライバ２２２に対応するエミュレータ側のデバイスドライバとしてのエミュレータ用ＰＣＩ通信ドライバ２２５と、擬似ビデオドライバ２２４に対応するエミュレータ側のデバイスドライバとしてのエミュレータ用ビデオドライバ２２６とを有している。また、擬似ＮＶＲＡＭドライバ２２３が利用する設定情報記憶ファイル２２７を有している。このように、複数種類のエミュレータを有している場合には、各エミュレータに対応する複数のドライバを用意する。
【００５５】
擬似ＰＣＩ通信ドライバ２２２およびエミュレータ用ＰＣＩ通信ドライバ２２５は、エンジンに対応するエンジンエミュレータ２７０との命令の送受信を行う。なお、実際のエンジンにおいては、例えば、ドアが開閉された場合や、原稿がセットされた場合にユーザに通知する処理がある。また、用紙残量をユーザに通知する処理がある。このように、エンジンはＮａｔｉｖｅプログラム２１０からの命令によらず自発的に命令の送信を行う場合がある。そこで、プログラム開発キット８は、このような命令を発生させるための動作設定用アプリケーション２９０をさらに有している。動作設定用アプリケーション２９０は、上述のようなドア開、原稿セット、用紙残量などを通知するためのイベントを発生させるためのアプリケーションである。
【００５６】
擬似ＮＶＲＡＭドライバ２２３は、ＯＳ２２０に設けられた設定情報記憶ファイル２２７にアクセスする。ＮＶＲＡＭエミュレータ２７１は、設定情報記憶ファイル２２７の内容の初期化、読み出し、保存などを行う。
【００５７】
擬似ビデオドライバ２２４およびエミュレータ用ビデオドライバ２２６は、ＩＰＵに対応するＩＰＵエミュレータ２７２との命令の送受信を行う。
【００５８】
図１３は、開発対象プログラムであるＪａｖａ（登録商標）プログラム１００を実機１１に搭載した様子を示す図である。このように、実機１１においては、ＯＳ３７０は、ＰＣＩ通信ドライバ３７１と、ＮＶＲＡＭ３７２と、ビデオドライバ３７３とを有している。そしてＰＣＩ通信ドライバ３７１は、コントローラボード３３０を介してエンジン制御プログラム３６０と命令の送受信を行う。このように、ＰＣＩ通信ドライバ３７１は、他のボード上のプログラムとの通信を行う。ＮＶＲＡＭ３７２は、ＮＶＲＡＭ３８０と命令の送受信を行う。ビデオドライバ３７３は、画像処理ＡＳＩＣ（Application  Specific  Integrated  Circuit）３８２と命令の送受信を行う。
【００５９】
図１４は、擬似ＰＣＩ通信ドライバ２２２およびエミュレータ用ＰＣＩ通信ドライバ２２５の処理を説明するための図である。まず、擬似ＰＣＩ通信ドライバ２２２は、Ｎａｔｉｖｅプログラム２１０からイベント受信要求としてｒｅａｄ命令を受信する（ステップＳ２００）。
【００６０】
さらに、Ｎａｔｉｖｅプログラム２１０から実行要求通知としてｗｒｉｔｅ命令を受信する（ステップＳ２０２）。次に、Ｎａｔｉｖｅプログラム２１０は、コマンド書き込みの実行要求を通信用バッファに書き込み（ステップＳ２０４）、割り込みイベントをエミュレータ用ＰＣＩ通信ドライバ２２５に通知する（ステップＳ２０６）。
【００６１】
エミュレータ用ＰＣＩ通信ドライバ２２５は、通知用バッファにアクセスし、実行要求としてコマンドを読み込む（ステップＳ２０８）。次に、エミュレータ用ＰＣＩ通信ドライバ２２５は、実行要求通知としてｒｅａｄ命令をエンジンエミュレータ２７０に送信する（ステップＳ２１０）。次に、エンジンエミュレータ２７０は、エンジン仕様に合わせて実行要求を処理する（ステップＳ２１２）。処理が完了すると、エンジンエミュレータ２７０は、実行結果通知としてｗｒｉｔｅ命令をエミュレータ用ＰＣＩ通信ドライバ２２５に送信する（ステップＳ２１４）。
【００６２】
次に、エミュレータ用ＰＣＩ通信ドライバ２２５は、コマンド書き込みの実行要求を通信用バッファに書き込む（ステップＳ２１６）。擬似ＰＣＩ通信ドライバ２２２は、通信バッファを介して割り込みイベント通知を受信すると（ステップＳ２１８）、コマンド読み込みの実行要求を通信用バッファに書き込む（ステップＳ２２０）。次に、擬似ＰＣＩ通信ドライバ２２２は、実行結果通知としてｒｅａｄ命令をＮａｔｉｖｅプログラム２１０に送信する（ステップＳ２２２）。以上で、処理が終了する。
【００６３】
このように、擬似ＰＣＩ通信ドライバ２２２、エミュレータ用ＰＣＩ通信ドライバ２２５およびエンジンエミュレータ２７０を利用することにより、Ｎａｔｉｖｅプログラム２１０は、実機に搭載された際と同一の処理を行うことができる。
【００６４】
図１５は、動作設定用アプリケーション２９０によりイベントが発生した場合の、擬似ＰＣＩ通信ドライバ２２２およびエミュレータ用ＰＣＩ通信ドライバ２２５の処理を説明するための図である。まず、擬似ＰＣＩ通信ドライバ２２２は、Ｎａｔｉｖｅプログラム２１０からイベント受信要求としてｒｅａｄ命令を受信する（ステップＳ２３０）。
【００６５】
その後、動作設定用アプリケーション２９０においてエンジン状態通知のイベントが発生すると、動作設定用アプリケーション２９０は、エンジンエミュレータ２７０にエンジン状態通知イベント発生を通知する（ステップＳ２３２）。次に、エンジンエミュレータ２７０は、エンジン状態通知としてｗｒｉｔｅ命令をエミュレータ用ＰＣＩ通信ドライバ２２５に送信する（ステップＳ２３４）。
【００６６】
次に、エミュレータ用ＰＣＩ通信ドライバ２２５は、通信用バッファに状態通知のコマンドを書き込む（ステップＳ２３６）。次に、擬似ＰＣＩ通信ドライバ２２２は、通信用バッファから割り込みイベント通知を受信し（ステップＳ２３８）、さらに、通信用バッファから状態通知のコマンドを読み込む（ステップＳ２４０）。次に、擬似ＰＣＩ通信ドライバ２２２は、エンジン状態通知としてｒｅａｄ命令をＮａｔｉｖｅプログラム２１０に送信する（ステップＳ２４２）。以上で、処理が終了する。
【００６７】
このように、Ｎａｔｉｖｅプログラム２１０は動作設定用アプリケーション２９０によるイベント発生に応じた処理も行うことができるので、プログラム開発キット８によれば例えば「ドア開き」の際のＮａｔｉｖｅプログラム２１０の処理を確認することができる。
【００６８】
図１６は、ＩＰＵエミュレータ２７２の詳細な構成を示す図である。ＩＰＵエミュレータ２７２は、主に、受信局２８０と、メイン制御部２８１と、シナリオ情報管理部２８２と、タイマー２８３と、送信局２８４とを備えている。
【００６９】
受信局２８０は、エミュレータ用ビデオドライバ２２６からｒｅａｄ命令を受信すると、メイン制御部２８１に受信通知を行う。シナリオ情報管理部２８２は、シナリオ情報を管理している。シナリオ情報とは、デバイスドライバごとに設定された仕様についての情報である。図１７−１および図１７−２に示すように、シナリオ情報には、タイマー仕様、デバイスドライバ送信仕様、デバイスドライバ受信仕様が含まれている。
【００７０】
デバイスドライバ受信仕様には、デバイスユニット指定識別子としてデバイスユニット名が記述されている。例えば、図１７−１においては、デバイスユニット名「ＶＩＮ」で識別されるデバイスユニットが指定されている。図１８に示すように、「ＶＩＮ」は、ビデオ入力器を示している。
【００７１】
デバイスドライバ送信仕様には、処理結果指定識別子として処理結果が記述されている。図１７−１に示す処理結果「ＣＯＭＰＬＥＴＥ」は、正常終了を示している。なお、図１７−２に示す処理結果「ＥＲＲＯＲ」は、異常終了を示している。タイマー仕様には、処理時間指定識別子として処理時間が記述されている。図１７−１においては、５０ｍｓと記述されている。
【００７２】
タイマー仕様として、処理時間指定識別子および処理時間が記述されている。図１８に示すように、ＩＰＵエミュレータに対応するデバイスドライバは多様にある。そこで、このように、デバイスドライバごとの仕様を格納しておき、指定されたデバイスドライバに対応する仕様を利用する。これにより、多様なデバイスドライバそれぞれに応じた処理を行うことができる。
【００７３】
再び説明を図１６に戻す。メイン制御部２８１は、シナリオ情報管理部２８２から所定のシナリオ情報を読み出す。そして、このシナリオ情報にしたがい、必要に応じてタイマー２８３に対しタイマー設定を行う。メイン制御部２８１は、さらに所定のタイミングで送信局２８４に対し送信要求を送る。送信局２８４は、メイン制御部２８１から送信要求を受け取るとエミュレータ用ビデオドライバ２２６に対しデータを発行する。
【００７４】
図１９は、ＩＰＵエミュレータ２７２の処理を説明するための図である。まず、エミュレータ用ビデオドライバ２２６はディスクセットを送信する（ステップＳ２５０）。ここでディスクセットとは、処理対象となる画像のアドレスなど画像処理に関する条件を示す情報である。ＩＰＵエミュレータ２７２においては、ディスクセットが画像処理の条件として登録される（ステップＳ２５２）。所定時間経過後、エミュレータ用ビデオドライバ２２６は、ディスクセットの実行指示を送信する（ステップＳ２５４）。
【００７５】
ＩＰＵエミュレータ２７２のメイン制御部２８１は、ディスクセットに示されるデバイスドライバに対するシナリオ情報を読み込む（ステップＳ２５６）。シナリオ情報に示された時間が経過すると（ステップＳ２５８，Ｙｅｓ）、処理結果をエミュレータ用ビデオドライバ２２６に応答する（ステップＳ２６０）。次に、エミュレータ用ビデオドライバ２２６は、ディスクセット開放指示をＩＰＵエミュレータ２７２に送信する（ステップＳ２６２）。ＩＰＵエミュレータ２７２は、ディスクセット開放指示にしたがいディスクセットを開放する（ステップＳ２６４）。以上で処理が終了する。
【００７６】
このように、擬似ビデオドライバ２２４、エミュレータ用ビデオドライバ２２６およびＩＰＵエミュレータ２７２を利用することにより、Ｎａｔｉｖｅプログラム２１０のうち画像処理にかかる処理の開発や確認を行うことができる。
【００７７】
図２０は、擬似ＮＶＲＡＭドライバ２２３の処理を説明するための図である。ＮＶＲＡＭに保存すべきデータを永続化するために、ＰＣ上のＨＤＤ、すなわちユーザ空間上に必要な情報を保持しておく。Ｎａｔｉｖｅプログラム２１０が指定した情報はＲＡＭ、すなわちカーネル空間に存在する。デバイスドライバすなわち擬似ＮＶＲＡＭドライバ２２３が、カーネル空間とユーザ空間の間のデータの送受信を直接行うことはできない。そこで、ＮＶＲＡＭエミュレータ２７１を介してアクセス経路を実現する。
【００７８】
さらに、ファイルの読み書き速度は、ＲＡＭの読み書き速度に対して遅い。そこで、パフォーマンスの低下を防ぐべく、ＮＶＲＡＭエミュレータ２７１に指示があった場合にのみ、ユーザ空間に存在するファイルへの読み書きを行うこととする。
【００７９】
具体的には、ＮＶＲＡＭエミュレータ２７１の電源がＯＮされると（ステップＳ２７０）、ＮＶＲＡＭエミュレータ２７１は、ユーザ空間（ＨＤＤ）に設けられたデータ記憶用ファイルから必要なデータを読み出す（ステップＳ２７２）。そして、このデータをカーネル空間の設定情報記憶ファイル２２７に保存する。すなわち設定情報記憶ファイル２２７を初期化する（ステップＳ２７４）。
【００８０】
この状態において、Ｎａｔｉｖｅプログラム２１０がデータ記憶指示としてｗｒｉｔｅ命令を送信すると（ステップＳ２８０）、擬似ＮＶＲＡＭドライバ２２３は、ｗｒｉｔｅ命令に応じて、設定情報記憶ファイル２２７にデータを書き込む（ステップＳ２８２）。また、Ｎａｔｉｖｅプログラム２１０がデータ読み込み指示としてｒｅａｄ命令を送信した場合には、ｒｅａｄ命令に応じて（ステップＳ２８４）、設定情報記憶ファイル２２７からデータを読み出す（ステップＳ２８６）。
【００８１】
ＮＶＲＡＭエミュレータ２７１の電源オフが指示されると、ＮＶＲＡＭエミュレータ２７１はデータ保存指示にしたがい（ステップＳ２９０）、設定情報記憶ファイル２２７からデータを読み出す（ステップＳ２９２）。そして、読み出したデータをユーザ空間上のデータ記憶用ファイルに書き込む（ステップＳ２９４）。以上で、処理が終了する。
【００８２】
なお、第８の実施の形態にかかるプログラム開発キット８のこれ以外の構成および処理は、他の実施の形態にかかるプログラム開発キットの構成および処理と同様である。
【図面の簡単な説明】
【００８３】
【図１】第１の実施の形態にかかるプログラム開発キット１の機能構成を示すブロック図である。
【図２】Ｊａｖａ（登録商標）プログラム１００が実際に搭載される実機１０の機能構成を示す図である。
【図３】実施の形態１にかかるプログラム開発キット１が展開されるＰＣのハードウェアの構成を示す図である。
【図４】第２の実施の形態にかかるプログラム開発キット２の機能構成を示す図である。
【図５】第３の実施の形態にかかるプログラム開発キット３の機能構成を示す図である。
【図６】第４の実施の形態にかかるプログラム開発キット４の機能構成を示す図である。
【図７】第５の実施の形態にかかるプログラム開発キット５の機能構成を示す図である。
【図８】第６の実施の形態にかかるプログラム開発キット６の機能構成を示す図である。
【図９】第７の実施の形態にかかるプログラム開発キット７の機能構成を示す図である。
【図１０】エミュレータ２３０の詳細な構成を示すブロック図である。
【図１１】エミュレータ２３０の処理を示すフローチャートである。
【図１２】第８の実施の形態にかかるプログラム開発キット８の機能構成を示すブロック図である。
【図１３】開発対象プログラムであるＪａｖａ（登録商標）プログラム１００を実機１１に搭載した様子を示す図である。
【図１４】擬似ＰＣＩ通信ドライバ２２２およびエミュレータ用ＰＣＩ通信ドライバ２２５の処理を説明するための図である。
【図１５】擬似ＰＣＩ通信ドライバ２２２およびエミュレータ用ＰＣＩ通信ドライバ２２５の処理を説明するための図である。
【図１６】ＩＰＵエミュレータ２７２の詳細な構成を示す図である。
【図１７−１】シナリオ情報を説明するための図である。
【図１７−２】シナリオ情報を説明するための図である。
【図１８】デバイスユニット名とデバイスユニットの対応関係を示す図である。
【図１９】ＩＰＵエミュレータ２７２の処理を説明するための図である。
【図２０】擬似ＮＶＲＡＭドライバ２２３の処理を説明するための図である。
【符号の説明】
【００８４】
１〜８  プログラム開発キット
１０  実機
５１  ＣＰＵ
５２  ＲＯＭ
５３  ＲＡＭ
５７  通信I／Ｆ
６２  バス
１００  Ｊａｖａ（登録商標）プログラム
１０１  Ｎａｔｉｖｅプログラム
２００  ＪＶＭ
２１０  Ｎａｔｉｖｅプログラム
２２０  ＯＳ
２２１  擬似デバイスドライバ
２２２  擬似ＰＣＩ通信ドライバ
２２３  擬似ＮＶＲＡＭドライバ
２２４  擬似ビデオドライバ
２２５  エミュレータ用ＰＣＩ通信ドライバ
２２６  エミュレータ用ビデオドライバ
２２７  設定情報記憶ファイル
２３０  エミュレータ
２３１  メインスレッド
２３２  受信スレッド
２３３  送信処理部
２３４  タイマー
２４０  仮想マシン動作ソフトウェア
２５０  デバイスドライバ
２６０  擬似デバイスドライバ
２６１  エミュレータ用デバイスドライバ
２７０  エンジンエミュレータ
２７１  ＮＶＲＡＭエミュレータ
２７２  ＩＰＵエミュレータ
２８０  受信局
２８１  メイン制御部
２８２  シナリオ情報管理部
２８３  タイマー
２８４  送信局
２９０  動作設定用アプリケーション
【図１】
2008217574.tif 000003
【図２】
2008217574.tif 000004
【図３】
2008217574.tif 000005
【図４】
2008217574.tif 000006
【図５】
2008217574.tif 000007
【図６】
2008217574.tif 000008
【図７】
2008217574.tif 000009
【図８】
2008217574.tif 000010
【図９】
2008217574.tif 000011
【図１０】
2008217574.tif 000012
【図１１】
2008217574.tif 000013
【図１２】
2008217574.tif 000014
【図１３】
2008217574.tif 000015
【図１４】
2008217574.tif 000016
【図１５】
2008217574.tif 000017
【図１６】
2008217574.tif 000018
【図１７−１】
2008217574.tif 000019
【図１７−２】
2008217574.tif 000020
【図１８】
2008217574.tif 000021
【図１９】
2008217574.tif 000022
【図２０】
2008217574.tif 000023
【手続補正書】
【提出日】平成20年1月28日(2008.1.28)
【手続補正１】
【補正対象書類名】図面
【補正対象項目名】図１８
【補正方法】変更
【補正の内容】
【図１８】
2008217574.tif 000024