(57)【特許請求の範囲】
【請求項１】
予め定められた処理を行うハードウェアをレジスタによって制御するプログラムのエラー検知方法であって、
前記予め定められた処理の実行中であるか否かを示す信号を出力し、
前記レジスタに対して前記予め定められた処理の制御に関するレジスタ値の変更が加えられたことを検知して検知信号を出力し、
前記予め定められた処理の実行中であるか否かを示す信号及び前記検知信号に基づき、前記予め定められた処理の実行中において前記レジスタ値の変更が加えられたことが検知された場合にエラーを検知することを特徴とするエラー検知方法。
【請求項２】
前記レジスタに対して、前記予め定められた処理の実行開始の制御に関するレジスタ値の変更が加えられた場合に、前記検知信号を出力することを特徴とする請求項１に記載のエラー検知方法。
【請求項３】
前記レジスタに対して、前記予め定められた処理の動作を設定するレジスタ値の変更が加えられた場合に、前記検知信号を出力することを特徴とする請求項１または２に記載のエラー検知方法。
【請求項４】
前記エラーが検知された場合に、前記プログラムの動作履歴を示す情報を取得して記憶媒体に格納することを特徴とする請求項１乃至３いずれか１項に記載のエラー検知方法。
【請求項５】
前記エラーが検知された場合に、前記プログラムの動作履歴を示す情報を取得し、
前記取得された動作履歴を示す情報を表示するための表示情報を生成して出力することを特徴とする請求項４に記載のエラー検知方法。
【請求項６】
前記エラーが検知された場合に、前記プログラムの動作履歴と前記エラーが検知されたタイミングとを対応させて表示するための表示情報を生成して出力することを特徴とする請求項５に記載のエラー検知方法。
【請求項７】
前記エラーが検知された場合に、前記プログラムの動作履歴にエラーを書き込むことを特徴とする請求項１乃至６いずれか１項に記載のエラー検知方法。
【請求項８】
予め定められた処理を行う情報処理回路であって、
前記予め定められた処理を制御するためのプログラムからの制御を受け付けるためのレジスタと、
前記予め定められた処理を行う情報処理モジュールと、
前記情報処理モジュールの動作を監視し、前記予め定められた処理の実行中であるか否かを示す信号を出力する実行中監視モジュールと、
前記レジスタを監視し、前記予め定められた処理の動作に関するレジスタ値の変更が加えられたことを検知して検知信号を出力するレジスタ監視モジュールと、
前記予め定められた処理の実行中であるか否かを示す信号及び前記検知信号に基づき、前記予め定められた処理の実行中において前記レジスタ値の変更が加えられたことが検知された場合にエラーを検知するエラー検知モジュールとを含むことを特徴とする情報処理回路。
【請求項９】
前記エラーが検知された場合に、タイムスタンプと関連付けられた前記情報処理モジュールの動作履歴を取得して記憶媒体に格納するログ処理モジュールを含むことを特徴とする請求項８に記載の情報処理回路。
【請求項１０】
予め定められた処理を行うハードウェアをレジスタによって制御するプログラムのエラー検知用プログラムであって、
前記ハードウェアによる前記予め定められた処理をシミュレーションするステップと、
前記予め定められた処理のシミュレーションが実行中であるか否かを示す信号を出力するステップと、
前記レジスタに対して前記予め定められた処理に関するレジスタ値の変更が加えられたことを検知して検知信号を出力するステップと、
前記予め定められた処理のシミュレーションが実行中であるか否かを示す信号及び前記検知信号に基づき、前記予め定められた処理のシミュレーションの実行中において前記レジスタ値の変更が加えられたことが検知された場合にエラーを検知するステップとを情報処理装置に実行させることを特徴とするエラー検知用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、エラー検知方法、情報処理回路及びエラー検知用プログラムに関し、特に、ハードウェアと連動して動作するソフトウェアのエラー検知に関する。
【背景技術】
【０００２】
ハードウェアと連動して動作するソフトウェアは、ハードウェアに設けられたレジスタにパラメータを設定することにより、ハードウェアの動作を制御する。例えば、ハードウェアを起動させて処理を実行させる場合、ソフトウェアは、ハードウェアの起動や処理の実行を命令するために割り当てられているレジスタに値を設定する。
【０００３】
このようなソフトウェアの開発に際しては、制御対象のハードウェアにおいて動作の不具合が発生しないようにプログラムを構成する必要がある。このようなソフトウェアの作成に用いられるものとして、検証シナリオに基づいたシミュレーションを行うシミュレーション装置が提案されている（例えば、特許文献１参照）。
【０００４】
特許文献１に開示された技術においては、ハードウェアを制御するソフトウェアであるドライバからの指示に対する応答を出力すると共に、その際の制御情報を蓄積することにより、ソフトウェア及びハードウェアの検証を高精度に行う事を可能としている。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述したように制御対象のハードウェアにおいて動作の不具合が発生する場合とは、例えば、ハードウェアがソフトウェアからの制御に基づいて処理を開始した後、その処理が完了する前に、再度ソフトウェアからハードウェアの起動指示がなされる場合や、パラメータの変更指示がなされる場合である。このような現象はハードウェア内部のレジスタで発生する現象であるため、オペレータがその現象を容易且つ即座に認識することは困難である。
【０００６】
また、上述したようなハードウェアの例としては、例えば画像処理装置に搭載される画像処理用の回路や、画像形成出力を実行するプロッタエンジン及び原稿を読み取るスキャナエンジン等である。このような画像処理用のハードウェアをソフトウェアによって制御する際の制御の高速化のため、ドライバを介さずにアプリケーションが直接ハードウェアを制御する、即ち、アプリケーションがハードウェアのレジスタに直接アクセスするような態様が用いられる場合がある。
【０００７】
ドライバを介する場合、ドライバに含まれるレジスタ制御機能により、上述したようなエラーの検知を行うことが可能である場合もあるが、ドライバを省略してアプリケーションが直接ハードウェアを制御する場合、エラーの検知は更に困難となる。
【０００８】
ハードウェアの動作実行中における起動レジスタ及びパラメータレジスタに対するレジスタ値の変更を防ぐことを容易に実現する機能として、ハードウェア側において、動作実行中におけるレジスタ値の変更をブロックする方法がある。しかしながら、これは応急的な措置であり、ハードウェアが動作実行中であるにも関わらずレジスタ値の変更を行うような誤った処理が含まれるソフトウェアを修正するものではない。
【０００９】
尚、上述したような事情は、ハードウェアの開発段階におけるシミュレーションや作成されたハードウェアの動作検証において課題となる他、運用が開始された装置に搭載されているハードウェアであっても同様に課題となり得る。
【００１０】
本発明は、上記実情を考慮してなされたものであり、ハードウェアの動作実行中におけるレジスタ値の変更を容易且つ迅速に認識可能とすることを目的とする。
【課題を解決するための手段】
【００１１】
上記課題を解決するために、本発明の一態様は、予め定められた処理を行うハードウェアをレジスタによって制御するプログラムのエラー検知方法であって、前記予め定められた処理の実行中であるか否かを示す信号を出力し、前記レジスタに対して前記予め定められた処理の制御に関するレジスタ値の変更が加えられたことを検知して検知信号を出力し、前記予め定められた処理の実行中であるか否かを示す信号及び前記検知信号に基づき、前記予め定められた処理の実行中において前記レジスタ値の変更が加えられたことが検知された場合にエラーを検知することを特徴とする。
【００１２】
また、本発明の他の態様は、予め定められた処理を行う情報処理回路であって、前記予め定められた処理を制御するためのプログラムからの制御を受け付けるためのレジスタと、前記予め定められた処理を行う情報処理モジュールと、前記情報処理モジュールの動作を監視し、前記予め定められた処理の実行中であるか否かを示す信号を出力する実行中監視モジュールと、前記レジスタを監視し、前記予め定められた処理の動作に関するレジスタ値の変更が加えられたことを検知して検知信号を出力するレジスタ監視モジュールと、前記予め定められた処理の実行中であるか否かを示す信号及び前記検知信号に基づき、前記予め定められた処理の実行中において前記レジスタ値の変更が加えられたことが検知された場合にエラーを検知するエラー検知モジュールとを含むことを特徴とする。
【００１３】
また、本発明の更に他の態様は、予め定められた処理を行うハードウェアをレジスタによって制御するプログラムのエラー検知用プログラムであって、前記ハードウェアによる前記予め定められた処理をシミュレーションするステップと、前記予め定められた処理のシミュレーションが実行中であるか否かを示す信号を出力するステップと、前記レジスタに対して前記予め定められた処理に関するレジスタ値の変更が加えられたことを検知して検知信号を出力するステップと、前記予め定められた処理のシミュレーションが実行中であるか否かを示す信号及び前記検知信号に基づき、前記予め定められた処理のシミュレーションの実行中において前記レジスタ値の変更が加えられたことが検知された場合にエラーを検知するステップとを情報処理装置に実行させることを特徴とする。
【発明の効果】
【００１４】
本発明によれば、ハードウェアの動作実行中におけるレジスタ値の変更を容易且つ迅速に認識可能とすることができる。
【図面の簡単な説明】
【００１５】
【図１】本発明の実施形態に係る画像形成装置のハードウェア構成を示すブロック図である。
【図２】本発明の実施形態に係る画像形成装置の機能構成を示す図である。
【図３】本発明の実施形態に係る専用ＨＷの制御構成を示す図である。
【図４】本発明の実施形態に係る専用ＨＷの制御態様を示す図である。
【図５】本発明の実施形態に係る仮想プラットフォームの機能構成を示す図である。
【図６】本発明の実施形態に係る専用ＨＷのエラー検知動作を示すフローチャートである。
【図７】本発明の実施形態に係るユーザインタフェースモジュール２０２によって表示される結果表示画面の例を示す図である。
【図８】本発明の他の実施形態に係る専用ＨＷの機能構成を示すブロック図である。
【図９】本発明の他の実施形態に係る専用ＨＷのエラー検知動作を示すフローチャートである。
【図１０】本発明の他の実施形態に係る動作ログを示す図である。
【図１１】本発明の他の実施形態に係るアプリケーション及びドライバの動作ログを示す図である。
【発明を実施するための形態】
【００１６】
実施の形態１．
以下、図面を参照して、本発明の実施形態を詳細に説明する。本実施形態においては、プリンタ、スキャナ、複写機等の機能を含む複合機（ＭＦＰ：Ｍｕｌｔｉ  Ｆｕｎｃｔｉｏｎ  Ｐｅｒｉｐｈｅｒａｌ）としての画像処理装置に搭載されるハードウェアのエラー検知を例として説明する。
【００１７】
図１は、本実施形態に係る画像形成装置１のハードウェア構成を示すブロック図である。図１に示すように、本実施形態に係る画像形成装置１は、一般的なサーバやＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）等の情報処理端末と同様の構成に加えて、画像形成出力に係るエンジンを有する。即ち、本実施形態に係る画像形成装置１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０、専用ＨＷ（Ｈａｒｄ  Ｗａｒｅ）４０、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）５０及びＩ／Ｆ６０がバス９０を介して接続されている。また、Ｉ／Ｆ６０にはＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）７０及び操作部８０が接続されている。
【００１８】
ＣＰＵ１０は演算装置であり、画像形成装置１全体の動作を制御する。ＲＡＭ２０は、情報の高速な読み書きが可能な揮発性の記憶媒体であり、ＣＰＵ１０が情報を処理する際の作業領域として用いられる。ＲＯＭ３０は、読み出し専用の不揮発性記憶媒体であり、ファームウェア等のプログラムが格納されている。
【００１９】
専用ＨＷ４０は、画像形成装置１において予め定められた処理を実行する情報処理回路である。専用ＨＷ４０には、画像形成出力を実行するためのプリントエンジンや、原稿を読み取るためのスキャナユニットの他、プリントエンジンが画像形成出力を実行するための画像情報を生成するハードウェアアクセラレータが含まれる。専用ＨＷ４０においてソフトウェア制御を受け付けるために設けられるレジスタに対する処理が、本実施形態において検知するべきエラーの趣旨である。
【００２０】
ＨＤＤ５０は、情報の読み書きが可能な不揮発性の記憶媒体であり、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）や各種の制御プログラム、アプリケーション・プログラム等が格納されている。Ｉ／Ｆ６０は、バス９０と各種のハードウェアやネットワーク等を接続し制御する。ＬＣＤ７０は、ユーザが画像形成装置１の状態を確認するための視覚的ユーザインタフェースである。操作部８０は、キーボードやマウス等、ユーザが画像形成装置１に情報を入力するためのユーザインタフェースである。
【００２１】
このようなハードウェア構成において、ＲＯＭ３０やＨＤＤ５０若しくは図示しない光学ディスク等の記録媒体に格納されたプログラムがＲＡＭ２０に読み出され、ＣＰＵ１０がそれらのプログラムに従って演算を行うことによりソフトウェア制御部が構成される。このようにして構成されたソフトウェア制御部と、ハードウェアとの組み合わせによって、本実施形態に係る画像形成装置１の機能を実現する機能ブロックが構成される。
【００２２】
次に、図２を参照して、本実施形態に係る画像形成装置１の機能構成について説明する。図２は、本実施形態に係る画像形成装置１の機能構成を示すブロック図である。図２に示すように、本実施形態に係る画像形成装置１は、コントローラ１００、ＡＤＦ（Ａｕｔｏ  Ｄｏｃｕｍｅｎｎｔ  Ｆｅｅｄｅｒ：原稿自動搬送装置）１１０、スキャナユニット１２０、排紙トレイ１３０、ディスプレイパネル１４０、給紙テーブル１５０、プリントエンジン１６０、排紙トレイ１７０及びネットワークＩ／Ｆ１８０を有する。
【００２３】
また、コントローラ１００は、主制御部１０１、エンジン制御部１０２、入出力制御部１０３、画像処理部１０４及び操作表示制御部１０５を有する。図２に示すように、本実施形態に係る画像形成装置１は、スキャナユニット１２０、プリントエンジン１６０を有する複合機として構成されている。尚、図２においては、電気的接続を実線の矢印で示しており、用紙の流れを破線の矢印で示している。
【００２４】
ディスプレイパネル１４０は、画像形成装置１の状態を視覚的に表示する出力インタフェースであると共に、タッチパネルとしてユーザが画像形成装置１を直接操作し若しくは画像形成装置１に対して情報を入力する際の入力インタフェース（操作部）でもある。ネットワークＩ／Ｆ１８０は、画像形成装置１がネットワークを介して他の機器と通信するためのインタフェースであり、Ｅｔｈｅｒｎｅｔ（登録商標）やＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）インタフェースが用いられる。
【００２５】
スキャナユニット１２０は原稿を読み取るための撮像装置であり、プリントエンジン１６０は、用紙に対して画像形成出力を実行するためのプロッタエンジンであり、いずれも専用ＨＷ４０によって実現される。コントローラ１００がスキャナユニット１２０及びプリントエンジン１６０を制御するためにスキャナユニット１２０及びプリントエンジン１６０夫々の内部に設けられるレジスタの制御が、本実施形態において検知するべきエラーの１つである。
【００２６】
コントローラ１００は、ソフトウェアとハードウェアとの組み合わせによって構成される。具体的には、ＲＯＭ３０や不揮発性メモリ並びにＨＤＤ５０や光学ディスク等の不揮発性記録媒体に格納されたファームウェア等の制御プログラムが、ＲＡＭ２０等の揮発性メモリ（以下、メモリ）にロードされ、ＣＰＵ１０がそれらのプログラムに従って演算を行うことにより構成されるソフトウェア制御部と、集積回路などのハードウェアとによってコントローラ１００が構成される。コントローラ１００は、画像形成装置１全体を制御する制御部として機能する。
【００２７】
主制御部１０１は、コントローラ１００に含まれる各部を制御する役割を担い、コントローラ１００の各部に命令を与える。エンジン制御部１０２は、プリントエンジン１６０やスキャナユニット１２０等を制御若しくは駆動する駆動手段としての役割を担う。入出力制御部１０３は、ネットワークＩ／Ｆ１８０を介して入力される信号や命令を主制御部１０１に入力する。また、主制御部１０１は、入出力制御部１０３を制御し、ネットワークＩ／Ｆ１８０を介して他の機器にアクセスする。
【００２８】
画像処理部１０４は、主制御部１０１の制御に従い、入力された印刷ジョブに含まれる印刷情報に基づいて描画情報を生成する。この描画情報とは、画像形成部であるプリントエンジン１６０が画像形成動作において形成すべき画像を描画するための情報である。また、印刷ジョブに含まれる印刷情報とは、ＰＣ等の情報処理装置にインストールされたプリンタドライバによって画像形成装置１が認識可能な形式に変換された情報であり、本実施形態においては、ＰＤＬ（Ｐａｇｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）によって記述された情報である。
【００２９】
画像処理部１０４は、ＣＰＵ１０がプログラムに従って演算を行うことにより構成されるソフトウェアによっても実現される他、上述したようなハードウェアアクセラレータによっても実現される。このように画像処理部１０４として機能する専用ＨＷ４０内のレジスタの制御が、本実施形態において検知するべきエラーの１つである。操作表示制御部１０５は、ディスプレイパネル１４０に情報表示を行い若しくはディスプレイパネル１４０を介して入力された情報を主制御部１０１に通知する。
【００３０】
画像形成装置１がプリンタとして動作する場合は、まず、入出力制御部１０３がネットワークＩ／Ｆ１８０を介して印刷ジョブを受信する。入出力制御部１０３は、受信した印刷ジョブを主制御部１０１に転送する。主制御部１０１は、印刷ジョブを受信すると、画像処理部１０４を制御して、印刷ジョブに含まれる印刷情報に基づいて描画情報を生成させる。
【００３１】
画像処理部１０４によって描画情報が生成されると、エンジン制御部１０２は、生成された描画情報に基づき、給紙テーブル１５０から搬送される用紙に対して画像形成を実行する。即ち、プリントエンジン１６０が画像形成部として機能する。プリントエンジン１６０の具体的態様としては、インクジェット方式による画像形成機構や電子写真方式による画像形成機構等を用いることが可能である。プリントエンジン１６０によって画像形成が施された文書は排紙トレイ１７０に排紙される。
【００３２】
画像形成装置１がスキャナとして動作する場合は、ユーザによるディスプレイパネル１４０の操作若しくはネットワークＩ／Ｆ１８０を介して外部のクライアント用の情報処理端末等から入力されるスキャン実行指示に応じて、操作表示制御部１０５若しくは入出力制御部１０３が主制御部１０１にスキャン実行信号を転送する。主制御部１０１は、受信したスキャン実行信号に基づき、エンジン制御部１０２を制御する。
【００３３】
エンジン制御部１０２は、ＡＤＦ１１０を駆動し、ＡＤＦ１１０にセットされた撮像対象原稿をスキャナユニット１２０に搬送する。また、エンジン制御部１０２は、スキャナユニット１２０を駆動し、ＡＤＦ１１０から搬送される原稿を撮像する。また、ＡＤＦ１１０に原稿がセットされておらず、スキャナユニット１２０に直接原稿がセットされた場合、スキャナユニット１２０は、エンジン制御部１０２の制御に従い、セットされた原稿を撮像する。即ち、スキャナユニット１２０が撮像部として動作する。
【００３４】
撮像動作においては、スキャナユニット１２０に含まれるＣＣＤ等の撮像素子が原稿を光学的に走査し、光学情報に基づいて生成された撮像情報が生成される。エンジン制御部１０２は、スキャナユニット１２０が生成した撮像情報を画像処理部１０４に転送する。画像処理部１０４は、主制御部１０１の制御に従い、エンジン制御部１０２から受信した撮像情報に基づき画像情報を生成する。画像処理部１０４が生成した画像情報はＨＤＤ４０等の画像形成装置１に装着された記憶媒体に保存される。
【００３５】
画像処理部１０４によって生成された画像情報は、ユーザの指示に応じてそのままＨＤＤ４０等に格納され若しくは入出力制御部１０３及びネットワークＩ／Ｆ１８０を介して外部の装置に送信される。即ち、スキャナユニット１２０及びエンジン制御部１０２が画像入力部として機能する。
【００３６】
また、画像形成装置１が複写機として動作する場合は、エンジン制御部１０２がスキャナユニット１２０から受信した撮像情報若しくは画像処理部１０４が生成した画像情報に基づき、画像処理部１０４が描画情報を生成する。その描画情報に基づいてプリンタ動作の場合と同様に、エンジン制御部１０２がプリントエンジン１６０を駆動する。
【００３７】
次に、本実施形態に係る専用ＨＷ４０の制御態様について、図３を参照して説明する。図３に示すように、専用ＨＷ４０内部には、ＣＰＵ１０との間で情報をやり取りするためのレジスタ４１が設けられている。レジスタ４１はバス９０を介してＣＰＵ１０と接続されており、バス９０を介してレジスタ値の設定を受け付ける。
【００３８】
ＣＰＵ１０は、ＲＡＭ２０にロードされたプログラムに従って演算を行うことにより、専用ＨＷ４０のレジスタにアクセスして専用ＨＷ４０を制御する。ＣＰＵ１０が専用ＨＷ４０を制御するためのプログラムは、図３に示すようにドライバ１１やアプリケーション１２である。尚、図３においては、図示の便宜上ＣＰＵ１０内部にドライバ１１及びアプリケーション１２を示しているが、実際には、上述したようにＲＡＭ２０にロードされたドライバ・プログラム及びアプリケーション・プログラムに従って演算を行うことにより、ＣＰＵ１０がドライバ１１、アプリケーション１２として処理を行う。
【００３９】
アプリケーション１２は、画像処理装置１において夫々の機能を実行するために構成されるソフトウェアであり、プリントアウト実行用のアプリケーション、スキャン実行用のアプリケーション、コピー実行用のアプリケーション等である。ドライバ１１は、アプリケーション１２が専用ＨＷ４０の機能を用いる際に、専用ＨＷ４０との間でレジスタ４１の制御を行うために構成されるソフトウェアであり、スキャナユニット１２０、プリントエンジン１６０や、ハードウェアアクセラレータ夫々に対応して構成される。
【００４０】
尚、図３においては、アプリケーション１２がドライバ１１を介して専用ＨＷ４０を制御する場合を例として示しているが、ドライバ１１を省略し、アプリケーション１２が専用ＨＷ４０のレジスタ４１に直接アクセスするような構成でも良い。また、図３においては、図示の容易化のためにＣＰＵ１０がバス９０に接続されているように示しているが、実際には、ＣＰＵ１０はチップセット等のブリッジを介してバス９０に接続されている。
【００４１】
次に、本実施形態におけるＣＰＵ１０による専用ＨＷ４０の制御態様及び検知するべきエラーの態様について、図４（ａ）〜（ｃ）を参照して説明する。図４（ａ）は、ＣＰＵ１０の制御により専用ＨＷ４０を起動して動作させる場合の一般的な動作状態を示すタイミングチャートである。以下の説明においては、図３に示すようにアプリケーション１２及びドライバ１１による制御を、ＣＰＵ１０による制御として説明する。
【００４２】
図４（ａ）に示すように、専用ＨＷ４０に動作を実行させる場合、ＣＰＵ１０がレジスタ４１の起動レジスタにレジスタ値を書き込むことにより、専用ＨＷ４０を起動させる。図４（ａ）〜（ｃ）においては、ＣＰＵ１０による起動レジスタ値の設定を“ＫＩＣＫ”と示す。
【００４３】
ＣＰＵ１０による“ＫＩＣＫ１”によって起動された専用ＨＷ４０は、レジスタ４１のうちパラメータ設定用のレジスタに設定さているパラメータ値に従ってハードウェア処理を開始する。これにより、図４（ａ）に“ＲＵＮ”と示す期間、ハードウェア処理が実行される。ＣＰＵ１０による“ＫＩＣＫ２”についても同様に、“ＲＵＮ”と示す所定の処理期間、専用ＨＷ４０はハードウェア処理を実行する。
【００４４】
図４（ｂ）は、本実施形態において検知対象となるエラーのうち、専用ＨＷ４０が処理期間中であるにも関わらず、起動レジスタへのレジスタ値の書込み、即ちＫＩＣＫが行われた場合を示すタイミングチャートである。“ＫＩＣＫ１”によるハードウェア処理の実行期間の“ＲＵＮ”が終了する前に、ＣＰＵ１０によって“ＫＩＣＫ１´”が行われても、“ＫＩＣＫ１”に対応するハードウェア処理が実行中であるため、“ＫＩＣＫ１´”に対応するハードウェア処理は実行不可能であり、専用ＨＷ４０やアプリケーション１２若しくはドライバ１１の動作において不具合の原因となり得る。
【００４５】
同様に、図４（ｃ）は、本実施形態に検知対象となるエラーのうち、専用ＨＷ４０が処理期間中であるにも関わらず、パラメータ設定レジスタへのパラメータ値の書込み、即ちパラメータ変更が行われた場合を示すタイミングチャートである。“ＫＩＣＫ１”によるハードウェア処理の実行期間の“ＲＵＮ”が終了する前に、ＣＰＵ１０によってパラメータ変更が行われると、変更前のパラメータによって“ＫＩＣＫ１”に対応するハードウェア処理を開始したにも関わらず、処理の途中でパラメータ値が変更されてしまうこととなり、専用ＨＷ４０やアプリケーション１２若しくはドライバ１１の動作において不具合の原因となり得る。
【００４６】
このような不正な“ＫＩＣＫ１´”及びパラメータ変更は、ドライバ１１またはアプリケーション１２を構成するためのプログラムに、専用ＨＷ４０が動作中であるにも関わらず起動レジスタの設定、パラメータ変更等が発生するようなプログラムが含まれることによって生じる。これは即ち、ドライバ１１またはアプリケーション１２を構成するためのプログラムに含まれるバグである。
【００４７】
本実施形態に係る要旨は、このような専用ＨＷ４０によるハードウェア動作の実行中における起動レジスタ値の設定やパラメータ変更等、専用ＨＷ４０の動作やアプリケーション１２、ドライバ１１の動作上において不正なレジスタ４１へのアクセスを検知することにある。
【００４８】
このようなエラーを検知するため、本実施形態においては、図１に示す構成のうち専用ＨＷ４０以外の構成を有するＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）等の情報処理装置上において、専用ＨＷ４０、バス９０、ドライバ１１及びアプリケーション１２を含む環境をシミュレートして仮想的なプラットフォームを構成し、ドライバ１１やアプリケーション１２の動作をテストして上述したようなバグを検知する。以下、本実施形態に係る仮想プラットフォームについて説明する。
【００４９】
図５は、本実施形態に係る仮想プラットフォーム２００の構成を示す図である。仮想プラットフォーム２００は、ＣＰＵ１０がＲＡＭ２０にロードされたプログラムに従って演算を行うことにより構成され、図３において説明したような専用ＨＷ４０、バス９０及びＣＰＵ１０を含む構成をシミュレーションする。
【００５０】
図５に示すように、仮想プラットフォーム２００は、ドライバ１１、アプリケーション１２、仮想バス２０１、ユーザインタフェースモジュール２０２及び仮想ハードウェア２１０を含む。また、仮想ハードウェア２１０は、レジスタシミュレータモジュール２１１、ＨＷシミュレータモジュール２１２、起動レジスタ監視モジュール２１３、パラメータレジスタ監視モジュール２１４、実行中監視モジュール２１５、エラー検知モジュール２１６及びログ処理モジュール２１７を含む。
【００５１】
ドライバ１１及びアプリケーション１２は、図３に示すものと同一のものであり、夫々のプログラムに従ってＣＰＵ１０が演算を行うことにより構成される。仮想バス２０１は、バス９０の機能をシミュレーションするためのものであり、ドライバ１１の出力を取得して仮想ハードウェア２１０内に構成されたレジスタへのレジスタ設定処理等の機能をシミュレーションする。
【００５２】
仮想ハードウェア２１０は、専用ＨＷ４０の機能をシミュレーションすると共に、図４（ａ）〜（ｃ）において説明したエラーを検知する機能を有する。レジスタシミュレータモジュール２１１は、レジスタ４１の機能をシミュレーションし、仮想バス２０１を介してドライバ１１によるレジスタ値の設定を受け付ける。ＨＷシミュレータモジュール２１２は、レジスタシミュレータモジュール２１１へのレジスタ値の設定に基づき、専用ＨＷ４０が実行するハードウェア動作、即ち予め定められた処理をシミュレーションする情報処理モジュールである。
【００５３】
起動レジスタ監視モジュール２１３は、レジスタシミュレータモジュール２１１に対する起動レジスタのレジスタ設定を監視し、起動レジスタ設定がされた場合、即ち予め定められた処理の実行開始の制御に関するレジスタ値の変更が加えられた場合に検知信号を出力する。パラメータレジスタ監視モジュール２１４は、レジスタシミュレータモジュール２１１に対するパラメータ設定レジスタのレジスタ設定を監視し、パラメータ変更がされた場合、即ち、予め定められた処理の動作を設定するレジスタ値の変更が加えられた場合に検知信号を出力する。
【００５４】
即ち、起動レジスタ監視モジュール２１３及びパラメータレジスタ監視モジュール２１４は、ＨＷシミュレータモジュール２１２による予め定められた処理の制御に関するレジスタ値の変更が加えられた場合に、それを検知して検知信号を出力するレジスタ監視モジュールとして機能する。
【００５５】
実行中監視モジュール２１５は、ＨＷシミュレータモジュール２１２がレジスタシミュレータモジュール２１１の起動レジスタに対するレジスタ設定に従ってハードウェア動作のシミュレーションを開始した後、シミュレーション上においてＨＷシミュレータモジュール２１２の予め定められた処理が実行されている期間内であるか否かを監視して、実行中であるか否かを示す信号を出力する。
【００５６】
実行中監視モジュール２１５による、ＨＷシミュレータモジュール２１２がハードウェア動作の実行期間内であるか否かの監視方法は、ＨＷシミュレータモジュール２１２の仕様により異なる。例えば、ＨＷシミュレータモジュール２１２が、ハードウェア動作の完了に際して、レジスタシミュレータモジュール２１１のレジスタに動作終了を示す値を書き込むような仕様の場合、実行中監視モジュール２１５は、そのレジスタ値を監視することによってハードウェア動作の実行期間内であるか否かを監視することができる。
【００５７】
また、ＨＷシミュレータモジュール２１２が、ハードウェア動作の完了に際して、動作の完了を示す信号を出力するような仕様の場合、実行中監視モジュール２１５は、その動作の完了を示す信号を検知することによって、ハードウェア動作の実行期間内であるか否かを監視することができる。その他、ハードウェア動作の実行期間が常に一定であるような場合、実行中監視モジュール２１５は、ＨＷシミュレータモジュール２１２がハードウェア動作のシミュレーションを開始してからの期間をカウントすることにより、ハードウェア動作の実行期間内であるか否かを監視することができる。
【００５８】
ハードウェアシミュレータモジュール２１２は、シミュレーションする対象のハードウェアによって動作の実行終了を示す信号を出力する場合や、動作の実行終了を示すレジスタ値をレジスタシミュレータモジュール２１１の専用のレジスタに設定する場合等がある。実行中監視モジュール２１５は、ＨＷシミュレータ２１２によるそれらの処理に基づいてＨＷシミュレータモジュール２１２がシミュレーション上にハードウェア動作を実行中であるか否か監視し、ハードウェア動作が実行中であることを示す信号を出力する。
【００５９】
エラー検知モジュール２１６は、起動レジスタ監視モジュール２１３、パラメータレジスタ監視モジュール２１４及び実行中監視モジュール２１５が出力する信号に基づき、エラーを検知する。エラー検知モジュール２１５は、実行中監視モジュール２１５が出力する信号に基づき、ＨＷシミュレータモジュール２１２によるシミュレーション上でハードウェア動作が実行中であるか否か判断し、ハードウェア動作が実行中であるにも関わらず、起動レジスタ監視モジュール２１３またはパラメータレジスタ監視モジュール２１４から夫々検知信号が出力された場合にエラーを検知する。
【００６０】
エラー検知モジュール２１６は、エラーを検知すると、ログ処理モジュール２１７及びユーザインタフェースモジュール２０２に対してエラー検知信号を出力する。ログ処理モジュール２１７は、ＨＷシミュレータモジュール２１２の動作ログを取得すると共に、エラー検知モジュール２１６からエラー検知信号を取得した場合、エラーログを生成する。ログ処理モジュール２１７は、ＨＷシミュレータ２１２から取得した動作ログ及び生成したエラーログをＨＤＤ５０に格納する。
【００６１】
ユーザインタフェースモジュール２０２は、エラー検知モジュール２１６によるエラー検知に応じて、ログ処理モジュール２１７からＨＷシミュレータモジュール２１２の動作ログを取得すると共に、ドライバ１１やアプリケーション１２の動作ログを取得し、夫々の動作ログとエラー発生のタイミングとを関連付けて表示するための表示情報を生成して出力する。これにより、エラー発生前後の各部の動作状況がＬＣＤ７０等の表示装置に表示されるため、オペレータは、ドライバ１１やアプリケーション１２の処理ステップのどの部分においてエラーが発生したのかを理解することができる。
【００６２】
次に、本実施形態に係る仮想プラットフォーム２００の動作について、図６のフローチャートを参照して説明する。図６に示すように、仮想プラットフォーム２００においては、先ず起動レジスタ監視モジュール２１３、パラメータレジスタ監視モジュール２１４及び実行中監視モジュール２１５が、夫々の監視対象の監視を開始する（Ｓ６０１）。
【００６３】
次に、ドライバ１１及びアプリケーション１２が起動する（Ｓ６０２）。起動したドライバ１１及びアプリケーション１２の処理により、レジスタシミュレータモジュール２１１の起動レジスタに“１”が設定されると（Ｓ６０３／ＹＥＳ）、ＨＷシミュレータモジュール２１２が起動し（Ｓ６０４）、ＨＷシミュレータモジュール２１２がハードウェア動作のシミュレーションを開始する（Ｓ６０５）。
【００６４】
ＨＷシミュレータモジュール２１２がハードウェア動作のシミュレーションを開始した後、ＨＷシミュレータモジュール２１２がハードウェア動作の処理を終了する前に（Ｓ６０６／ＮＯ）、起動レジスタ監視モジュール２１３が、レジスタシミュレータモジュール２１１の起動レジスタに“１”が設定されたことを検知すると（Ｓ６０７／ＹＥＳ）、エラー検知モジュール２１６には、実行中監視モジュール２１５及び起動レジスタ監視モジュール２１３の両方から信号が入力されることとなる。これにより、エラー検知モジュール２１６は、エラーを検知する（Ｓ６０９）。
【００６５】
また、ＨＷシミュレータモジュール２１２がハードウェア動作の処理を終了する前に（Ｓ６０６／ＮＯ）、パラメータレジスタ監視モジュール２１４が、レジスタシミュレータモジュール２１１のパラメータ設定レジスタへのパラメータ変更を検知すると（Ｓ６０７／ＮＯ、Ｓ６０８／ＹＥＳ）、エラー検知モジュール２１６には、実行中監視モジュール２１５及びパラメータレジスタ監視モジュール２１４の両方から信号が入力されることとなる。これにより、エラー検知モジュール２１６は、エラーを検知する（Ｓ６０９）。
【００６６】
エラー検知モジュール２１６は、エラーを検知すると、エラー検知信号をログ処理モジュール２１７及びユーザインタフェースモジュール２０２に出力する。エラー検知モジュール２１６からのエラー検知信号に応じて、ログ処理モジュール２１７は、ＨＷシミュレータ２１２の動作ログを取得してユーザインタフェースモジュール２０２に出力するログ処理を行う（Ｓ６１０）。尚、ＨＷシミュレータモジュール２１２の動作ログは、例えば、仮想ハードウェア２１０を構成するプログラムがロードされているＲＡＭ２０内に確保された他の領域に随時記憶され、ログ処理モジュール２１７はその動作ログの情報を取得する。
【００６７】
尚、エラーを検知した場合、エラー検知モジュール２１６がレジスタシミュレータモジュール２１１に設けられたエラー検知用のレジスタに値を書き込むようにしても良い。アプリケーション１２及びドライバ１１に、エラー検知用レジスタの値に応じたブレークポイントを設けておけば、エラー検知に応じてアプリケーション１２及びドライバ１１の動作を一時停止若しくは強制終了させることができる。これにより、その後のデバッグ処理をスムーズに行うことができると共に、エラー検知後も動作が継続されて不要な動作ログが蓄積されることを避けることができる。尚、エラー検知に応じた値を書き込む先は、レジスタシミュレータモジュール２１１に設けられたエラー検知用のレジスタに限らず、アプリケーション１２及びドライバ１１のブレークポイントが対応しているアドレスのメモリであれば、同様に実現可能である。
【００６８】
ユーザインタフェースモジュール２０２は、エラー検知モジュール２１６からエラー検知信号を取得すると、アプリケーション１２及びドライバ１１の動作ログを取得する。そして、ユーザインタフェースモジュール２０２は、アプリケーション１２及びドライバ１１の動作ログ並びにログ処理モジュール２１７から取得したＨＷシミュレータモジュール２１２に基づき、エラー検知結果を表示するための表示情報を生成して、ＬＣＤ７０等の表示装置にエラー検知結果を表示させる（Ｓ６１１）。
【００６９】
尚、アプリケーション１２及びドライバ１１の動作ログは、ユーザインタフェースモジュール２０２が取得する場合の他、ログ処理モジュール２１７がレジスタシミュレータモジュール２１１を介して取得するようにしても良い。
【００７０】
ハードウェア動作のシミュレーションを開始した後、エラーが検知されることなく、ＨＷシミュレータモジュール２１２がハードウェア動作を完了した場合（Ｓ６０６／ＹＥＳ）、ログ処理モジュール２１７がＨＷシミュレータモジュール２１２の動作ログを取得してユーザインタフェースモジュール２０２に出力する（Ｓ６１０）。ユーザインタフェースモジュール２０２は、エラー検知モジュール２１６からエラー検知信号が入力されていない状態でログ処理モジュール２１７から動作ログを取得すると、アプリケーション１２及びドライバ１１から動作ログを取得し、エラー検知ではなく、通常の処理結果を表示するための表示情報を生成してＬＣＤ７０等の表示装置に検知結果を表示させる（Ｓ６１１）。このような処理により、本実施形態に係る仮想プラットフォーム２００の動作が完了する。
【００７１】
図７に、Ｓ６１１において表示されるエラー検知結果の表示画面の例を示す。図７に示すように、エラー検知結果の表示画面においては、アプリケーション１２の動作ログである“アプリケーション動作ログ”、ドライバ１１の動作ログである“ドライバ動作ログ”、ＨＷシミュレータモジュール２１２の動作ログである“ＨＷ動作ログ”が表示されている。
【００７２】
上述したように、エラー検知モジュール２１６においてエラーが検知された場合に、夫々の動作ログが取得されてユーザインタフェースモジュール２０２に入力される。従って、図７に示す表示画面においては、エラーが発生する前後までの動作ログが夫々表示される。このような表示により、ユーザは、アプリケーション１２やドライバ１１のどのような処理が、図４（ｂ）、（ｃ）に示すようなエラーの原因となっているのかを容易に確認することが可能となる。
【００７３】
以上、説明したように、本実施形態に係る仮想プラットフォーム２００において、アプリケーション１２やドライバ１１の動作をテストすることにより、アプリケーション１２及びドライバ１１のバグの検知を容易に行うことが可能となる。即ち、ハードウェアの動作実行中におけるレジスタ値の変更を容易且つ迅速に認識可能とすることができる
【００７４】
尚、上記実施形態においては、図５に示すように、アプリケーション１２及びドライバ１１に対して１つの仮想ハードウェア２１０を構成してバグの検知を行う場合を例として説明した。しかしながら、実際の画像処理装置においては、プリントエンジン、スキャナユニット、画像処理用のハードウェアアクセラレータ等、複数のハードウェアが搭載される。従って、それらのハードウェアを夫々シミュレーションするために仮想ハードウェア２１０を複数設けることも可能である。
【００７５】
また、仮想プラットフォーム２００において実行されるアプリケーション１２やドライバ１１及び仮想バス２０１は、シミュレーション対象の機器に応じて構成することが好ましい。例えば、シミュレーション対象の機器がマルチコアＣＰＵを含む構成である場合、上記の各構成もマルチコアＣＰＵによる演算によって実現されるように複数設けられる。
【００７６】
実施の形態２．
実施の形態１においては、アプリケーション１２やドライバ１１の開発段階において、仮想プラットフォーム２００を用いることによりバグを検知する方法を例として説明した。本実施形態においては、実際に運用される装置に含まれる専用ＨＷ４０に、図５の仮想ハードウェア２１０に含まれるような機能を設け、実際に運用されている装置におけるエラー検知を容易化する場合を例として説明する。尚、実施の形態１と同様の符号を付す構成については同一または相当部を示すものとし、詳細な説明を省略する。
【００７７】
図８は、本実施形態に係る専用ＨＷ４０と、バス９０を介したＣＰＵ１０及びＨＤＤ５０との接続形態を示す図である。図８に示すように、本実施形態に係る専用ＨＷ４０は、レジスタ４１、エンジンモジュール４２、起動レジスタ監視モジュール４３、パラメータレジスタ監視モジュール４４、実行中監視モジュール４５、エラー検知モジュール４６及びログ処理モジュール４７を含む。
【００７８】
レジスタ４１は、専用ＨＷ４０がＣＰＵ１０からの制御を受け付けるための記憶領域である。エンジンモジュール４２は、専用ＨＷ４０において夫々の機能を実現するためのハードウェアであり、実施の形態１のＨＷシミュレータモジュール２１２と同様に情報処理モジュールとして機能する。例えば、専用ＨＷ４０が画像処理を実行するハードウェアアクセラレータであれば、画像処理エンジンモジュール４２は、画像処理を実行する回路である。
【００７９】
起動レジスタ監視モジュール４３、パラメータレジスタ監視モジュール４４、実行中監視モジュール４５、エラー検知モジュール４６及びログ処理モジュール４７は、夫々図５において説明した起動レジスタ監視モジュール２１３、パラメータレジスタ監視モジュール２１４、実行中監視モジュール２１５、エラー検知モジュール２１６及びログ処理モジュール２１７に対応する機能を実現するハードウェアモジュールである。
【００８０】
尚、図８においては、専用ＨＷ４０に含まれる各部のモジュールが全てハードウェアモジュールである場合を例として説明するが、専用ＨＷ４０に含まれるマイコンやＣＰＵが、専用ＨＷ４０に設けられた記憶媒体に格納されているプログラムに従って演算を行うことにより構成されるソフトウェアモジュールとしても実現可能である。
【００８１】
次に、本実施形態に係る専用ＨＷ４０の動作について図９のフローチャートを参照して説明する。図９に示すように、画像処理装置１が動作開始すると（Ｓ９０１）、アプリケーション１２及びドライバ１１が起動する（Ｓ９０２）。起動したドライバ１１及びアプリケーション１２の処理により、レジスタ４１の起動レジスタに“１”が設定されると（Ｓ９０３／ＹＥＳ）、エンジンモジュール４２が起動し（Ｓ９０４）、エンジンモジュール４２がハードウェア動作を開始する（Ｓ９０５）。
【００８２】
エンジンモジュール４２がハードウェア動作のシミュレーションを開始した後、エンジンモジュール４２がハードウェア動作の処理を終了する前に（Ｓ９０６／ＮＯ）、起動レジスタ監視モジュール４３が、レジスタ４１の起動レジスタに“１”が設定されたことを検知すると（Ｓ９０７／ＹＥＳ）、エラー検知モジュール４６には、実行中監視モジュール４５及び起動レジスタ監視モジュール４３の両方から信号が入力されることとなる。これにより、エラー検知モジュール４６は、エラーを検知する（Ｓ９０９）。
【００８３】
また、エンジンモジュール４２がハードウェア動作の処理を終了する前に（Ｓ９０６／ＮＯ）、パラメータレジスタ監視モジュール４４が、レジスタ４１のパラメータ設定レジスタへのパラメータ変更を検知すると（Ｓ９０７／ＮＯ、Ｓ９０８／ＹＥＳ）、エラー検知モジュール４６には、実行中監視モジュール４５及びパラメータレジスタ監視モジュール４４の両方から信号が入力されることとなる。これにより、エラー検知モジュール４６は、エラーを検知する（Ｓ９０９）。
【００８４】
エラー検知モジュール４６は、エラーを検知すると、エラー検知信号をログ処理モジュール４７に出力する。エラー検知モジュール４６からのエラー検知信号に応じて、ログ処理モジュール４７は、ログ処理を実行する（Ｓ９１０）。ここで、Ｓ９１０のログ処理について説明する。
【００８５】
ログ処理モジュール４７は、ＨＷシミュレータ４２の動作ログを取得すると共に、レジスタ４１を介してアプリケーション１２及びドライバ１１の動作ログを取得する。図８の態様において、アプリケーション１２及びドライバ１１の動作ログは、例えばＲＡＭ２０内に確保された記憶領域に格納されており、その記憶領域の先頭アドレス及びアドレス範囲はレジスタ４１に設定されている。ログ処理モジュール４７は、そのようにレジスタ４１に設定された記憶領域のアドレスに基づいてＲＡＭ２０からアプリケーション１２及びドライバ１１の動作ログを取得する。
【００８６】
ログ処理モジュール４７は、エンジンモジュール４２から取得した動作ログと、アプリケーション１２及びドライバ１１から取得した動作ログとを、レジスタ４１を介してＨＤＤ５０に格納する。ここで、本実施形態に係る動作ログの例を図１０（ａ）〜（ｃ）に示す。図１０（ａ）は、エンジンモジュール４２から取得された動作ログであり、図１０（ｂ）は、アプリケーション１２の動作ログであり、図１０（ｃ）は、ドライバ１１の動作ログである。
【００８７】
図１０（ａ）〜（ｃ）に示すように、本実施形態に係る動作ログは、夫々の動作履歴がタイムスタンプと関連付けられている。そのため、ユーザは、夫々の動作履歴のタイムスタンプを比較することにより、アプリケーション１２やドライバ１１のどのような処理が、図４（ｂ）、（ｃ）に示すようなエラーの原因となっているのかを容易に確認することが可能となる。
【００８８】
このように、本実施形態によれば、実際に運用されている装置におけるエラー検知を容易化することが可能となる。画像処理装置１に搭載されるアプリケーション１２やドライバ１１は、装置が運用開始された後にアップデートされる可能性があり、その都度様々な装置においてバグの検証をすることはオペレータの負担が大きい。これに対して、ある程度までバグの検証がされた上でアップデートされ、更に詳細な検証については装置の運用上で行うことにより、オペレータによる事前のバグの検証の負担を軽減することが可能となる。
【００８９】
尚、上記実施形態においては、ログ処理モジュール４７が一度全ての動作ログを取得し、ＨＤＤ５０に全ての動作ログを格納する場合を例として説明した。この他、専用ＨＷ４０内に設けられた記憶媒体に全ての動作ログを格納するようにしても良い。
【００９０】
また、ログ処理モジュール４７がアプリケーション１２及びドライバ１１の動作ログを取得した上でＨＤＤ５０等の記憶媒体に格納するのではなく、アプリケーション１２及びドライバ１１と、ログ処理モジュール４７とが、夫々別個にＨＤＤ５０等の記憶媒体に動作ログを格納するようにしても良い。この場合であっても、図１０（ａ）〜（ｃ）に示すように、動作履歴がタイムスタンプと関連付けられていることにより、上記と同様にバグの検証を容易に行うことが可能である。
【００９１】
また、実施の形態１及び実施の形態２においては、図７及び図１０（ａ）〜（ｃ）に示すように、アプリケーション１２及びドライバ１１の動作ログと、ＨＷ動作ログとを取得対象とする場合を例として説明した。しかしながら、アプリケーション１２やドライバ１１のどのような処理がバグの原因となっているかを解析することが目的であるため、アプリケーション１２及びドライバ１１の動作ログにおいてエラーが発生したタイミングが判明すれば目的を達成することができる。
【００９２】
そのため、エラー検知モジュール４６、２１６がエラーを検知した場合にレジスタ４１、レジスタシミュレータモジュール２１１を介してアプリケーション１２及びドライバ１１の動作ログにエラーログを書き込むようにしても良い。レジスタ４１、レジスタシミュレータモジュール２１１を介したエラーログの出力については、上述したように、ＲＡＭ２０におけるアプリケーション１２及びドライバ１１の動作ログの記憶領域がレジスタ４１、レジスタシミュレータモジュール２１１に設定されており、エラー検知モジュール４６、２１６がエラーを検知してエラー検知レジスタに値を書き込む。アプリケーション１２及びドライバ１１は、エラー検知レジスタに値が書き込まれた場合に、アプリケーション１２及びドライバ１１の動作ログの最後尾にエラー検知ログを書き込むことにより実現可能である。
【００９３】
図１１（ａ）、（ｂ）に、このようにして生成されたアプリケーション１２及びドライバ１１の動作ログの例を示す。このような動作ログの態様により、アプリケーション１２やドライバ１１の動作においてエラーが発生したタイミングを容易に判断することが可能となる。
【００９４】
また、実施の形態１、２においては、図３や図５に示すように、アプリケーション１２がドライバ１１を介して、専用ＨＷ４０や仮想ハードウェア２１０を制御する場合を例として説明したが、ドライバ１１を介さずにアプリケーションが直接ハードウェアを制御する場合もあり得る。
【符号の説明】
【００９５】
１  画像形成装置
１０  ＣＰＵ
１１  ドライバ
１２  アプリケーション
２０  ＲＡＭ
３０  ＲＯＭ
４０  専用ＨＷ
４１  レジスタ
４２  エンジンモジュール
４３  起動レジスタ監視モジュール
４４  パラメータレジスタ監視モジュール
４５  実行中監視モジュール
４６  エラー検知モジュール
４７  ログ処理モジュール
５０  ＨＤＤ
６０  Ｉ／Ｆ
７０  ＬＣＤ
８０  操作部
９０  バス
１００  コントローラ
１０１  主制御部
１０２  エンジン制御部
１０３  入出力制御部
１０４  画像処理部
１０５  操作表示制御部
１１０  ＡＤＦ
１２０  スキャナユニット
１３０  排紙トレイ
１４０  ディスプレイパネル
１５０  給紙テーブル
１６０  プリントエンジン
１７０  排紙トレイ
１８０  ネットワークＩ／Ｆ
２００  仮想プラットフォーム
２０１  仮想バス
２０２  ユーザインタフェースモジュール
２１０  仮想ハードウェア
２１１  レジスタシミュレータモジュール
２１２  ＨＷシミュレータモジュール
２１３  起動レジスタ監視モジュール
２１４  パラメータレジスタ監視モジュール
２１５  実行中監視モジュール
２１６  エラー検知モジュール
２１７  ログ処理モジュール
【先行技術文献】
【特許文献】
【００９６】
【特許文献１】特開２００８−２２６２０７号公報
【図１】
0005780115.tif 000002
【図２】
0005780115.tif 000003
【図３】
0005780115.tif 000004
【図４】
0005780115.tif 000005
【図５】
0005780115.tif 000006
【図６】
0005780115.tif 000007
【図７】
0005780115.tif 000008
【図８】
0005780115.tif 000009
【図９】
0005780115.tif 000010
【図１０】
0005780115.tif 000011
【図１１】
0005780115.tif 000012