(57)【特許請求の範囲】
【請求項１】
ソースコードと、メッセージ出力対象となるレジスタを指定した埋め込み指示ファイルとを記憶した記憶部と、
前記ソースコードの、前記記憶部に記憶された前記埋め込み指示ファイルによって指定される前記レジスタへアクセスする記述を、出力期間の間、該レジスタの値を含むメッセージを出力装置に出力する記述を含む置き換え内容で置き換えて、該内容で置き換えられた該ソースコードから実行形式のバイナリファイルを前記記憶部に作成する作成部と
を有することを特徴とするメッセージ出力制御装置。
【請求項２】
前記埋め込み指示ファイルによって、機能毎に、前記出力期間を指定するメッセージ出力条件式と、レジスタ情報とが指定され、
前記置き換え内容は、メッセージ出力条件式によって指定されるタイマーに設定される前記出力期間と、対象のレジスタの指定情報を含むレジスタ情報によって指定されるメッセージ出力形式とを含むことを特徴とする請求項１記載のメッセージ出力制御装置。
【請求項３】
前記作成部は、前記埋め込み指示ファイルに基づいて、機能毎に前記出力期間が設定される機能構造体と、該機能構造体から接続される前記レジスタ情報からレジスタ構造体とを含む埋め込み指示構造体を前記記憶部に作成することを特徴とする請求項２記載のメッセージ出力制御装置。
【請求項４】
前記バイナリファイルを実行し、前記指定されたレジスタへのアクセス時に、該レジスタの値を含むメッセージの出力を開始し、該アクセス時に起動されたタイマーの設定値に前記出力期間を加算して設定することによって、該出力期間後、該メッセージの出力装置への出力を停止することを特徴とする請求項２又は３記載のメッセージ出力制御装置。
【請求項５】
コンピュータによって実行されるメッセージ出力制御方法であって、
記憶部に記憶されたソースコードと、メッセージ出力対象となるレジスタを指定した埋め込み指示ファイルとを入力し、
前記ソースコード内の、前記埋め込み指示ファイルによって指定される前記レジスタへアクセスする記述を、出力期間の間、該レジスタの値を含むメッセージを出力装置に出力する記述を含む置き換え内容で置き換え、
前記内容で置き換えられた前記ソースコードから実行形式のバイナリファイルを前記記憶部に作成する
ことを特徴とするメッセージ出力制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信系ＩＰ（Intellectual Property）マクロのドライバソフトウェアでのデバッグの際のメッセージ出力を制御することに関する。
【背景技術】
【０００２】
従来より、通信系ＩＰマクロのドライバソフトウェアの開発に当たっては、そのデバッグの際に標準的なソフトウェアのデバッグ用ツールであるデバッガソフトウェアが利用できない。デバッガでは、動作速度が実際の通信系ＩＰの標準的な速度と比較し著しく遅いため、利用すると通信相手側がタイムアウトエラーを発生してしまい、本来動作確認すべき状態にすることができないためである。従って、通信系ＩＰマクロのデバッグでは、主に、通信系ＩＰマクロを検証するためのドライバソフトウェアから、通信系ＩＰマクロの動作中に出力されたメッセージ（ログメッセージ）を記憶領域に保持しておき、動作終了後に、開発者が出力されたメッセージを見て検証している。
【０００３】
そのため、例えば、ソフトウェアの命令の実行中、デバイスメッセージを定期的にアクノリッジデバイスに書き込むこと等が提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−０４４７４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記従来技術では、通信系ＩＰマクロのレジスタの値などをファイルやコンソールなどの出力装置に出力させていることが可能であるが、異なる通信規格を実装するなどＩＰマクロの動作が複雑化しつつあるため、レジスタの数も増大していること等の状況において、全てのレジスタの値を常時出力する仕組みはデバッグを効果的に行うためには現実的ではない。
【０００６】
一方で、必要なレジスタの値のみを出力する仕組みをドライバソフトウェアにデバッグ用途として組み込むことは可能ではある。実際に、開発者は、その仕組みをドライバソフトウェアに組み込む作業を繰り返し実施してはいるが、このような開発者による作業では、次の問題がある。
【０００７】
（１）必要なレジスタを適宜判断して、その値を取得する仕組みをドライバソフトウェアに組み込んでコンパイルし、ターゲット装置で走行させ、メッセージを取得して解析することを行う。この場合、デバッグの段階に応じて検証対象のレジスタが異なるため、デバッグの段階毎にドライバソフトウェアを変更するのは煩雑である。また、レジスタ数が増加すると、その変更時に本来は消したり、変更してはならないコードを誤って修正してしまうことがある。誤った修正によって新たなバグが作りこまれてしまい、本来のデバッグ作業に加えて更に負担を増やしてしまうといった問題があった。
【０００８】
（２）一方で、一旦出力させたメッセージをそのまま消さないでいることも、解析性を阻害するために現実的ではない。
【０００９】
（３）また、デバッグ専用のメッセージであるため最終的には消去は必要であるにも関わらず、メッセージ出力の記載箇所が増加すれば、その削除を忘れる可能性も高くなる。このようなデバッグ用メッセージの消し忘れによって、実際の製品で不用意にメッセージが出力されてしまう可能性がある。
【課題を解決するための手段】
【００１０】
開示のメッセージ出力制御装置は、ソースコードと、メッセージ出力対象となるレジスタを指定した埋め込み指示ファイルとを記憶した記憶部と、前記ソースコードの、前記記憶部に記憶された前記埋め込み指示ファイルによって指定される前記レジスタへアクセスする記述を、出力期間の間、該レジスタの値を含むメッセージを出力装置に出力する記述を含む置き換え内容で置き換えて、該内容で置き換えられた該ソースコードから実行形式のバイナリファイルを前記記憶部に作成する作成部とを有する。
【００１１】
また、上記課題を解決するための手段として、コンピュータによって実行されるメッセージ出力制御方法、及び、コンピュータに上記メッセージ出力制御装置として機能させるためのプログラムとすることもできる。
【発明の効果】
【００１２】
開示の技術では、通信系ＩＰマクロのドライバソフトウェアでのデバッグの際のメッセージ出力を制御することができる。
【図面の簡単な説明】
【００１３】
【図１】第１実施例に係るデバッグシステムの構成例を示す図である。
【図２】ホスト装置のハードウェア構成を示す図である。
【図３】通信プロトコルの階層と機能との対応関係を示す図である。
【図４】埋め込み指示ファイルの形式例を示す図である。
【図５】開発者による処理の流れを説明するための図である。
【図６】変換プログラムを実行するホストＣＰＵによるバイナリファイルの作成処理の一例を説明するための図である。
【図７】ステップＳ１１４におけるソースコード解析処理を説明するための図である。
【図８】変換プログラムを実行するホストＣＰＵによるバイナリファイルの作成処理の他の例を説明するための図である。
【図９】ステップＳ１３４におけるアセンブラコード解析処理を説明するための図である。
【図１０】埋め込み指示構造体の例を示す図である。
【図１１】変換プログラムを実行するホストＣＰＵによる構造体作成処理を説明するための図である。
【図１２】機能出力状態保存領域の例を示す図である。
【図１３】各機能出力状態保存領域の構成例を示す図である。
【図１４】ＩＰマクロへのレジスタアクセス命令が実行する処理を説明するための図である。
【図１５】タイマー割込ハンドラのサブプログラムによる処理を説明するための図である。
【図１６】メッセージの出力例を示す図である。
【図１７】検証時の通信例を示す図である。
【図１８】メッセージの出力量の違いを説明するための図である。
【図１９】第１実施例に係るデバッグシステムの他の構成例を示す図である。
【図２０】図１９のデバッグシステムにおける開発者による処理の流れを説明するための図である。
【図２１】第２実施例に係るデバッグシステムの構成例を示す図である。
【図２２】実行可能形式作成処理を説明するための図である。
【図２３】適用することによって解消可能な問題点の例を説明するための図である。
【発明を実施するための形態】
【００１４】
以下、本発明の実施の形態を図面に基づいて説明する。本実施例では、通信系ＩＰマクロの下記の特徴を利用することにある。
【００１５】
（１）通信系ＩＰマクロがサポートする機能は、ほぼ対向側（通信相手先）とのやりとりの結果、状態変化が発生する。
【００１６】
（２）状態変化が発生した場合、その影響はその機能に応じて一定時間内で収束し、一定時間後は、次の状態変化が対向側とのやり取りの結果、再度発生するまでは、状態変化が起きない。
【００１７】
（３）通信系ＩＰマクロはそのサポートする機能毎にレジスタが分類されていることが殆どであり、共通している機能は極少数である。
【００１８】
ここでは、ＵＳＢ（Universal Serial Bus）の機能（「USB Function」）のＩＰマクロを利用して説明するが、本実施例は、ＵＳＢ規格のＩＰマクロに限定するものではなく、他の通信系ＩＰマクロ（ＳＡＴＡ（Serial Advanced Technology Attachment）、ＰＣＩ−Ｅｘｐｒｅｓｓ、Ｅｔｈｅｒｎｅｔ(登録商標)など）にも適用が可能である。
【００１９】
「USB Function」には、
（機能Ａ）USB Bus制御
（機能Ｂ）Endpoint管理：Default-Endpoint（Endpoint#0）への制御データ転送
（機能Ｃ）Bulkなどのデータ転送（バルクデータ転送）
を主に含む。機能Ａ、機能Ｂ、及び機能Ｃを実現するためのレジスタはそれぞれ複数あるが、本実施例では、下記のレジスタの値の状態変化の確認と、制御を実行する。実際のＩＰマクロでは、システム上のＣＰＵへの割り込み通知用途などで、更に多くのレジスタが必要であるが、ここでは省略する。
【００２０】
上記機能Ａの検証では、状態変化を確認するための状態レジスタ「ＵＳＢ＿Ｓ」と、状態を制御するための制御レジスタ「ＵＳＢ＿Ｃ」とを対象とする。
【００２１】
上記機能Ｂの検証では、状態変化を確認するための状態レジスタ「ＥＰ０＿Ｓ」と、状態を制御するための制御レジスタ「ＥＰ０＿Ｃ」とを対象とする。
【００２２】
上記機能Ｃの検証では、状態変化を確認するための状態レジスタ「ＥＰ１＿Ｓ」と、状態を制御するための制御レジスタ「ＥＰ１＿Ｃ」）とを対象とする。
【００２３】
以下、上記機能ＢのDefault-Endpointへの制御データ転送に着目して説明する。制御データ転送では、ドライバソフトウェアは、下記手順を実行する。
（Ｂ−１）制御データ転送の発生の有無を状態レジスタ「ＥＰ０＿Ｓ」で確認する。
（Ｂ−２）上記（Ｂ−１）で制御データ転送が発生していれば、制御データのパケットサイズをチェックして、状態レジスタ「ＥＰ０＿Ｓ」から転送種別を読み出す。
【００２４】
そして、
（Ｂ−３）読み出し完了フラグを制御レジスタ「ＥＰ０＿Ｃ」に設定する。
（Ｂ−４）上記（Ｂ−２）で読み出した転送種別に応じて制御レジスタに対向側に返すべきパケットのデータ値を必要な回数（バイト数）を設定する。
（Ｂ−５）状態レジスタ「ＥＰ０＿Ｓ」を確認し、制御レジスタ「ＥＰ０＿Ｃ」に設定した値（返送パケット）が全て設定し終わったことを書き込む。
【００２５】
次に、
（Ｂ−６）対向側からの受領確認パケットの到着を状態レジスタ「ＥＰ０＿Ｃ」で確認する。到着するまで、確認を継続する。
（Ｂ−７）受領確認パケットの到着を確認したら、その内容を状態レジスタ「ＥＰ０＿Ｃ」から読み出し、読み出し完了フラグを制御レジスタ「ＥＰ０＿Ｃ」に設定する。
【００２６】
ドライバソフトウェア内において上述した手順（Ｂ−１）から手順（Ｂ−７）のフローを実現する部分でのデバッグの際、手順（Ｂ−３）の設定以降にて、機能（Ｂ）の各レジスタの内容が手順（Ｂ−７）の完了までの期間あれば、有益なデバッグとなりえる。手順（Ｂ−３）よりも前、又は、手順（Ｂ−７）以降の状態レジスタ「ＥＰ０＿Ｃ」及び制御レジスタ「ＥＰ０＿Ｃ」の値については、特にデバッグに必要な値とはなり得ない。
【００２７】
そこで、手順（Ｂ−３）から手順（Ｂ−７）の期間の機能（Ｂ）に関連する状態レジスタ「ＥＰ０＿Ｃ」及び制御レジスタ「ＥＰ０＿Ｃ」の値のみが逐次出力されれば、必要な情報が全て得られ、かつ、不要な情報の出力を抑制することができる。
【００２８】
手順（Ｂ−３）の開始の判定については、機能（Ｂ）に関連する状態レジスタ「ＥＰ０＿Ｃ」及び制御レジスタ「ＥＰ０＿Ｃ」への書き込みで判断することができる。
【００２９】
出力の停止条件については、手順（Ｂ−７）後に停止されるのであればよいことになる。しかし、必ずしも手順（Ｂ−７）の判定が他のレジスタへの書き込み動作の区別を行うことは不可能ではないが、煩雑となる。複雑な判定ロジックを組み込めば、それだけ新たに問題が発生する可能性がある。
【００３０】
通信系のプロトコルでは、通常、応答時間に上限が定められており、それ以降の情報は不要にすることが可能である。手順（Ｂ−３）からその応答時間以内のレジスタの値の出力があれば良いことになる。例えば、複数の通信手順があるため、その規格で定められた時間のＮ倍（所定倍の時間）に設定する。所定倍（Ｎ倍）の時間は、規格に基づいて定めることが可能な時間長以内とする。
【００３１】
上述したようなメッセージ（ログメッセージ）の出力制御を実現するための構成について、以下に説明する。
【００３２】
図１は、第１実施例に係るデバッグシステムの構成例を示す図である。図１に例示されるデバッグシステム１０１は、ホスト装置１０と、ＩＣＥ（In-Circuit Emulator）装置２２４と、ターゲット装置３０とを有する。デバッグシステム１０１は、メッセージ出力制御装置に相当する。
【００３３】
ホスト装置１０は、ＩＣＥ装置２２４に接続され、ＩＣＥ装置２２４を制御して、ターゲット装置３０の検証を行なうホストコンピュータである。ホスト装置１０は、後述される図２に示されるハードウェア構成を有する。
【００３４】
ホスト装置１０は、ホストＣＰＵ１１によって制御され、記憶領域２２１と２２２とを有する。記憶領域２２１は、ホストＣＰＵ１１が処理を実行するために用いられる記憶領域であり、例えば、ホストＣＰＵ１１が埋め込み（クロス）コンパイラ及びリンカプログラムを実行する際に使用される。記憶領域２２２は、プログラムのソースコード、第１実施例に係る埋め込み指示ファイル、バイナリファイル等を格納する記憶領域である。
【００３５】
後述される図２に示すハードウェア構成において、記憶領域２２１は、ＲＡＭ（Random Access Memory）等を有する主記憶装置１２の記憶領域に相当し、記憶領域２２２は、ハードディスクデバイス等を有する補助記憶装置１３に相当する。ホストＣＰＵ１１と、記憶領域２２１と、記憶領域２２２とは、バス２２３で接続される。
【００３６】
記憶領域２２２には、ソースコード２００と、埋め込み指示ファイル２０２と、バイナリファイル２１０と、変換プログラム２２０とが記憶される。ソースコード２００は、ＩＰマクロ２１２を制御するプログラム（ドライバソフトウェア）のソースコードである。埋め込み指示ファイル２０２は、マクロ毎に、ＩＰマクロ仕様・規格書２０２に基づいて作成され、所定レジスタを監視してその値を含むメッセージを出力するためのコードを含むデータファイルである。
【００３７】
バイナリファイル２１０は、実行可能形式のバイナリファイルであり、埋め込み指示ファイル２０２に従って、検証対象の機能に関するレジスタのうち、指定されたレジスタのみメッセージ出力させるようにしたバイナリファイル２１０である。
【００３８】
変換プログラム２２０は、埋め込み指示ファイル２０２と、プログラムのソースコード２００とを入力して、実行形式のプログラム（バイナリファイル２１０）を出力する埋め込み（クロス）コンパイラ及びリンカプログラムである。変換プログラム２２０がホストＣＰＵ１１によって実行されて実現する処理部が、バイナリファイル２１０を作成する作成部に相当する。
【００３９】
ＩＰマクロ仕様・規格書２０１は、データファイルの場合は、記憶領域２２２に格納されていても良い。
【００４０】
ＩＣＥ装置２２２は、ソフトウェアとハードウェアの検証を行なうための装置であり、ホストＣＰＵ１１によって実行される制御プログラムの指示に従ってバイナリファイル２１０をターゲット装置３０の記憶領域２１４に転送して、ターゲット装置３０のターゲットＣＰＵ２１１にバイナリファイル２１０の内容に従って動作させる装置である。
【００４１】
ターゲット装置３０は、ターゲットＣＰＵ２１１と、ＩＰマクロ２１２と、接続先デバイス２１３と、記憶領域２１４と、メッセージ出力装置２１７と、タイマーモジュール２１８とを有する。
【００４２】
ターゲットＣＰＵ２１１は、実行可能形式のプログラムを走行させるＣＰＵである。ＩＰマクロ２１２は、通信制御を行う機能部分に相当し、ターゲットＣＰＵ２１１に接続される。接続先デバイス２１３は、ＩＰマクロ２１２に接続され通信を行う装置である。記憶領域２１４は、ターゲットＣＰＵ２１１で実行するプログラムを格納する記憶領域であり、例えば、ＲＡＭ等のメモリ装置である。
【００４３】
メッセージ出力装置２１７は、プログラム実行中の指示によりメッセージを出力する装置であり、ＣＲＴ（Cathode Ray Tube）、ＬＣＤ（Liquid Crystal Display）等の表示部を有する。タイマーモジュール２１８は、メッセージの出力判定に利用されるタイマー機能である。
【００４４】
ターゲットＣＰＵ２１１と、ＩＰマクロ２１２と、記憶領域２１４と、メッセージ出力装置２１７と、タイマーモジュール２１８とは、バス２１５で接続される。また、接続先デバイス２１３は、バス２１６によってＩＰマクロ２１２に接続される。
【００４５】
第１実施例に係るホスト装置１０は、図２に示すようなハードウェア構成を有する。図２は、ホスト装置のハードウェア構成を示す図である。図２において、ホスト装置１０は、コンピュータによって制御される端末であって、ホストＣＰＵ（Central Processing Unit）１１と、主記憶装置１２と、補助記憶装置１３と、入力装置１４と、表示装置１５と、ドライブ１８とを有し、バスＢに接続される。
【００４６】
ホストＣＰＵ１１は、主記憶装置１２に格納された制御プログラムに従ってホスト装置１０を制御すると共に、ＩＣＥ装置２２４にターゲット装置３０を検証するための指示を行なう。主記憶装置１２には、例えば、ＲＡＭ（Random Access Memory）等が用いられ、ホストＣＰＵ１１にて実行される制御プログラム、ホストＣＰＵ１１での処理に必要なデータ、ホストＣＰＵ１１での処理にて得られたデータ等を格納する。また、主記憶装置１２の一部の領域が、ホストＣＰＵ１１での処理に利用されるワークエリアとして割り付けられている。
【００４７】
補助記憶装置１３には、例えば、ハードディスクドライブが用いられ、各種処理を実行するためのプログラム等のデータを格納する。補助記憶装置１３に格納されているプログラムの一部が主記憶装置１２にロードされ、ホストＣＰＵ１１に実行されることによって、各種処理が実現される。記憶部１３０は、主記憶装置１２と補助記憶装置１３とを有する。
【００４８】
入力装置１４は、マウス、キーボード等を有し、ユーザがホスト装置１０による処理に必要な各種情報を入力するために用いられる。表示装置１５は、ホストＣＰＵ１１の制御のもとに必要な各種情報を表示する。
【００４９】
ホスト装置１０によって行われる処理を実現する制御プログラムは、例えば、ＣＤ−ＲＯＭ（Compact Disc Read-Only Memory）等の記憶媒体１９によってホスト装置１０に提供される。即ち、プログラムが保存された記憶媒体１９がドライブ１８にセットされると、ドライブ１８が記憶媒体１９からプログラムを読み出し、その読み出されたプログラムがバスＢを介して補助記憶装置１３にインストールされる。そして、プログラムが起動されると、補助記憶装置１３にインストールされたプログラムに従ってホストＣＰＵ１１がその処理を開始する。尚、プログラムを格納する媒体としてＣＤ−ＲＯＭに限定するものではなく、コンピュータが読み取り可能な媒体であればよい。コンピュータ読取可能な記憶媒体として、ＣＤ−ＲＯＭの他に、ＤＶＤディスク、ＵＳＢメモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリであっても良い。
【００５０】
また、ホスト装置１０によって行われる処理を実現する制御プログラムが、通信Ｉ／Ｆ１７を介して外部装置から提供されてもよい。或いは、外部装置へ該プログラムを提供し、後述される各処理は外部装置で実現されるように構成してもよい。通信Ｉ／Ｆ１７による通信は無線又は有線に限定されるものではない。
【００５１】
ＵＳＢ通信を例にして、通信プロトコルの階層と、上述したＵＳＢの機能（Ａ）〜（Ｃ）との対応について説明する。図３は、通信プロトコルの階層と機能との対応関係を示す図である。図３において、ＵＳＢ通信プロトコル階層２は、ＩＰマクロ仕様・規格書２０１によって定義され、下層から順に、USB Bus状態、USB EndPoint制御、USB Class制御、上位層を含む。また、各層での処理もＩＰマクロ仕様・規格書２０１によって示される。
【００５２】
ＵＳＢ通信プロトコル階層２において、USB Bus状態の層は機能Ａ（USB Bus制御）に相当し、USB EndPoint制御の層は機能Ｂ（USB EndPoint制御（EndPoint管理））に相当する。USB Class制御の層と、上位層とは、機能Ｃ（USB EndPoint制御（データ転送））に相当する。
【００５３】
次に、埋め込み指示ファイル２０２の形式について説明する。図４は、埋め込み指示ファイルの形式例を示す図である。図４（Ａ）において、マクロ毎に作成される埋め込み指示ファイル２０２は、機能種別毎、つまり、機能毎に、対象となるレジスタを指定した、メッセージ出力に関する制御コード４が作成される。各制御コード４によって、機能名４ａ、メッセージ出力条件式４ｂ、対象となるレジスタ毎のレジスタ情報４ｃとが示される。
【００５４】
メッセージ出力条件式４ｂは、対象のレジスタの値を含むメッセージを出力させる時間間隔を示すタイマー時間を指定する。レジスタ情報４ｃは、図４（Ｂ）に例示されるような構成を有する。
【００５５】
図４（Ｂ）において、レジスタ情報４ｃによって、レジスタ名４ｃ−１と、レジスタアドレス４ｃ−２と、メッセージ出力形式４ｃ−３とが指定される。
【００５６】
図５は、図１のデバッグシステム１００における開発者による処理の流れを説明するための図である。図５において、開発者は、ＩＰマクロ仕様・規格書２０１に基づいて、埋め込み指示ファイル２０２を手作業で作成し、記憶領域２２２に保存する（ステップＳ１０１）。開発者は、ホスト装置１０に変換プログラム２２０の実行を指示する（ステップＳ１０２）。変換プログラム２２０は記憶領域２２１にロードされ、ホストＣＰＵ１１によって実行される。変換プログラム２２０の実行によって、バイナリファイル２１０が作成され、記憶領域２２２に保存される。
【００５７】
開発者は、ホスト装置１０に対して、ターゲット装置３０の検証を開始させる（ステップＳ１０３）。ホスト装置１０は、ＩＣＥ装置２２４により、ターゲット装置３０の記憶領域２１４にバイナリファイル２１０を転送させ、ターゲット装置３０のターゲットＣＰＵ２１１に実行させる。
【００５８】
ターゲットＣＰＵ２１１がバイナリファイル２１０に従って動作することにより、ターゲットＣＰＵ２１１はＩＰマクロ２１２を制御し、バス２１６経由で接続先デバイス２１３との通信が実行される（ステップＳ１０４）。その際、埋め込み指示ファイル２０２で指定したレジスタの値などを含むメッセージがメッセージ出力装置２１７に出力される。
【００５９】
開発者は、メッセージ出力装置２１７に出力されたメッセージや接続先デバイス２１３で出力されるメッセージ等を確認して（ステップＳ１０５）、問題が有るか否かを判断する（ステップＳ１０６）。開発者は、問題が有ると判断した場合、問題に関するメッセージを解析する（ステップＳ１０７）。
【００６０】
開発者は、問題の解析にメッセージが不足しているか否かを判断する（ステップＳ１０８）。開発者は、メッセージは十分であると判断した場合、問題を解決するためにソースコード２００を修正して（ステップＳ１０９）、ステップＳ１０２へと戻る。一方、開発者は、メッセージが不足していると判断した場合、埋め込み指示ファイル２０２を修正、追加して、記憶領域２２２に保存し（ステップＳ１１０）、ステップＳ１０２へと戻る。
【００６１】
ステップＳ１０６において、開発者は、問題が無いと判断した場合、この処理（作業）を終了する。
【００６２】
上述したステップＳ１０２における、開発者による実行指示に従って、ホストＣＰＵ１１による変換プログラム２２０の実行中、ＩＰマクロ２１２へのレジスタ操作ＡＰＩが利用されるソースコード２００からバイナリファイル２１０を作成するまでのフローを図６で説明する。
【００６３】
図６は、変換プログラムを実行するホストＣＰＵによるバイナリファイルの作成処理の一例を説明するための図である。図６において、ホストＣＰＵ１１は、埋め込み指示ファイル２０２を読み込んで、埋め込み指示ファイル２０２の内容に従って、「埋め込み指示構造体」（後述）を記憶領域２２１に格納する（ステップＳ１１１）。ホストＣＰＵ１１は、未処理のソースコード２００が残っているか否かを判断する（ステップＳ１１２）。
【００６４】
ホストＣＰＵ１１は、未処理のソースコード２００が残っていると判断した場合、作業用に一時ファイル３ｆを記憶領域２２１に作成する（ステップＳ１１３）。ホストＣＰＵ１１は、ソースコードを解析するソースコード解析処理を実行し、その実行結果を作成した一時ファイル３ｆに保存する（ステップＳ１１４）。
【００６５】
その後、ホストＣＰＵ１１は、一時ファイル３ｆをコンパイルして、オブジェクトコードを作成する（ステップＳ１１５）。また、ホストＣＰＵ１１は、オブジェクトコードのファイル名を、元のソースコード２００のファイル名に基づいて適切な名前に変更する（ステップＳ１１６）。
【００６６】
ステップＳ１１２において、未処理のソースコード２００が残っていない場合、ホストＣＰＵ１１は、埋め込み指示の内容に応じて、ターゲット装置３０の記憶領域２１４に必要な領域を確保するサブプログラムを、オブジェクトファイルとして作成させる（ステップＳ１１７）。また、ホストＣＰＵ１１は、割り込みハンドラでの処理を実行するサブプログラムをオブジェクトファイルとして作成する（ステップＳ１１８）。
【００６７】
ホストＣＰＵ１１は、全オブジェクトファイルをリンクして、バイナリファイル２１０を作成して（ステップＳ１１９）、この処理を終了する。
【００６８】
上述したステップＳ１１４におけるソースコード解析処理を図７で説明する。図７は、ステップＳ１１４におけるソースコード解析処理を説明するための図である。図７において、ホストＣＰＵ１１は、ソースコード２００の最後か否かを判断する（ステップＳ１２１）。ホストＣＰＵ１１は、ソースコード２００の最後の場合、この処理を終了する。
【００６９】
ホストＣＰＵ１１は、Parser（構文解析）により次の構文要素を抽出して（ステップＳ１２２）、抽出した構文要素がＩＰマクロへのレジスタ操作ＡＰＩか否かを判断する（ステップＳ１２３）。ホストＣＰＵ１１は、抽出した構文要素がＩＰマクロへのレジスタ操作ＡＰＩでないと判断した場合、一時ファイル３ｆに記述をそのまま出力して（ステップＳ１２４）、ステップＳ１２１へと戻り、上述同様の処理を繰り返す。
【００７０】
一方、ステップＳ１２３において、ホストＣＰＵ１１は、抽出した構文要素がＩＰマクロへのレジスタ操作ＡＰＩである場合、レジスタ操作ＡＰＩの名前から、書き込み区別を判断し、ＡＰＩ引数で指定されるアドレスからレジスタアドレスを取得する（ステップＳ１２５）。
【００７１】
そして、ホストＣＰＵ１１は、「埋め込み指示構造体」（図１０）を参照して、取得したレジスタアドレスを各レジスタテーブル５ｒ（図１０）から検索する（ステップＳ１２６）。取得したレジスタアドレスが設定されたレジスタテーブル５ｒの構造体が特定される。また、ホストＣＰＵ１１は、レジスタテーブル５ｒが接続される機能テーブル５ｆ（図１０）を取得する（ステップＳ１２７）。
【００７２】
次に、ホストＣＰＵ１１は、機能テーブル５ｆから出力制御規則を取得し、レジスタテーブル５ｒから出力形式を取得して置き換え内容を作成し、ＩＰマクロへのレジスタアクセス命令を示す置き換え内容で操作ＡＰＩ呼出箇所を置き換える（ステップＳ１２８）。ホストＣＰＵ１１は、置き換えた結果を一時ファイル３ｆに出力して（ステップＳ１２９）、ステップＳ１２１へと戻り、上記同様の処理を繰り返す。
【００７３】
一方、ステップＳ１２１において、ホストＣＰＵ１１は、ソースコード２００の最後であると判断した場合、この処理を終了する。
【００７４】
上述したステップＳ１０２における、開発者による実行指示に従って、ホストＣＰＵ１１による変換プログラム２２０の実行中、ＩＰマクロ２１２へのレジスタ操作ＡＰＩが利用されていない（例えば、アセンブラコードで記述された）ソースコード２００からバイナリファイル２１０を作成するまでのフローを図８で説明する。
【００７５】
図８は、変換プログラムを実行するホストＣＰＵによるバイナリファイルの作成処理の他の例を説明するための図である。図８において、ホストＣＰＵ１１は、埋め込み指示ファイル２０２を読み込んで、埋め込み指示ファイル２０２の内容に従って、「埋め込み指示構造体」（後述）を記憶領域２２１に格納する（ステップＳ１３１）。ホストＣＰＵ１１は、未処理のソースコード２００が残っているか否かを判断する（ステップＳ１３２）。
【００７６】
ホストＣＰＵ１１は、未処理のソースコード２００が残っていると判断した場合、コンパイラにより、ソースコード２００をコンパイルしてアセンブラコード２００ａを記憶部記憶領域２２２に作成し（ステップＳ１３２−２）、作業用に一時ファイル３ｆを記憶領域２２１に作成する（ステップＳ１３３）。ホストＣＰＵ１１は、アセンブラコード２００ａを解析するアセンブラコード解析処理を実行し、その実行結果を記憶領域２２１に作成した一時ファイル３ｆに保存する（ステップＳ１３４）。
【００７７】
その後、ホストＣＰＵ１１は、アセンブラにより一時ファイル３ｆをオブジェクトコードに変換する（ステップＳ１３５）。また、ホストＣＰＵ１１は、オブジェクトコードのファイル名を、元のソースコード２００のファイル名に基づいて適切な名前に変更する（ステップＳ１３６）。
【００７８】
ステップＳ１３２において、未処理のソースコード２００が残っていない場合、ホストＣＰＵ１１は、埋め込み指示の内容に応じて、ターゲット装置３０の記憶領域２１４に必要な領域を確保するサブプログラムを、オブジェクトファイルとして作成させる（ステップＳ１３７）。また、ホストＣＰＵ１１は、割り込みハンドラでの処理を実行するサブプログラムをオブジェクトファイルとして作成する（ステップＳ１３８）。
【００７９】
ホストＣＰＵ１１は、全オブジェクトファイルをリンクして、バイナリファイル２１０を作成して（ステップＳ１１９）、この処理を終了する。
【００８０】
上述したステップＳ１３４におけるアセンブラコード解析処理を図９で説明する。図９は、ステップＳ１３４におけるアセンブラコード解析処理を説明するための図である。図９において、ホストＣＰＵ１１は、アセンブラコード２００ａの終了か否かを判断する（ステップＳ１４１）。ホストＣＰＵ１１は、アセンブラコード２００ａの終了の場合、この処理を終了する。
【００８１】
ホストＣＰＵ１１は、次の命令（オペコード及びオペランド）を抽出して（ステップＳ１４２）、オペコードがLoad/Storeか否かを判断する（ステップＳ１４３）。ホストＣＰＵ１１は、オペコードがLoad/Storeでないと判断した場合、一時ファイル３ｆに命令（オペコード及びオペランド）をそのまま出力して（ステップＳ１２４）、ステップＳ１４１へと戻り、上述同様の処理を繰り返す。
【００８２】
一方、ステップＳ１４３において、ホストＣＰＵ１１は、オペコードがLoad/Storeであると判断した場合、命令からLoad/Store対象のメモリアドレスを取得し、「埋め込み指示構造体」（図１０）を参照して、取得したレジスタアドレスを各レジスタテーブル５ｒ（図１０）から検索する（ステップＳ１４５）。取得したレジスタアドレスが設定されたレジスタテーブル５ｒの構造体が特定される。また、ホストＣＰＵ１１は、レジスタテーブル５ｒが接続される機能テーブル５ｆ（図１０）を取得する（ステップＳ１４６）。
【００８３】
次に、ホストＣＰＵ１１は、機能テーブル５ｆから出力制御規則を取得し、レジスタテーブル５ｒから出力形式を取得して、Load/Store命令から判断される読み出し、書き込みの区別から置き換え内容を作成し、ＩＰマクロへのレジスタアクセス命令を示す置き換え内容でLoad/Store命令を置き換える（ステップＳ１４７）。ホストＣＰＵ１１は、置き換えた結果を一時ファイル３ｆに出力して（ステップＳ１４８）、ステップＳ１４１へと戻り、上記同様の処理を繰り返す。
【００８４】
一方、ステップＳ１４１において、ホストＣＰＵ１１は、アセンブラコード２００ａの終了であると判断した場合、この処理を終了する。
【００８５】
図１０は、埋め込み指示構造体の例を示す図である。図１０（Ａ）において、各テーブル間の関係を示している。埋め込み指示構造体によって、複数の機能テーブル５ｆと、各機能テーブル５ｆから１以上のレジスタテーブル５ｒが関連付けられる。
【００８６】
機能テーブル５ｆは、図４の各制御コード４に相当する。レジスタテーブル５ｒは、図４の各制御コード４内のレジスタ情報４ｃに相当する。機能テーブル５ｆとレジスタテーブル５ｒとが、埋め込み指示構造体で管理される。
【００８７】
変換プログラム２２０内では、先頭の機能テーブル５ｆへのポインタ（先頭機能テーブルポインタ）が示されればよい。次の機能テーブル５ｆへは、各機能テーブル５ｆからポインタで示されればよい。次の機能テーブル５ｆへのポインタ（カレント機能テーブルポインタ）によって、機能テーブル５ｆがカレント機能テーブルとして設定される。
【００８８】
また、各機能テーブル５ｆから最初のレジスタテーブル５ｒへのポインタが示され、各レジスタテーブル５ｒにおいて、次のレジスタテーブル５ｒへのポインタが示されればよい。
【００８９】
埋め込み指示構造体は、図１０（Ｂ）に例示される機能テーブル５ｆの構造体と、図１０（Ｃ）に例示されるレジスタテーブル５ｒの構造体とを含む。図１０（Ｂ）及び図１０（Ｃ）では、次のテーブルへのポインタ、機能テーブル５ｆからレジスタテーブル５ｒへのポインタ等は省略している。
【００９０】
図１０（Ｂ）は、機能テーブル５ｆの構造体の例を示している。構造体によって、機能テーブル５ｆは、機能名、出力制御規則を含む。機能名は、図４（Ａ）に示す埋め込み指示ファイル２０２の機能名４ａに対応する。出力制御規則は、出力開始条件と出力期間とを有する。出力制御規則は、メッセージ出力情報４ｂに相当する。図１０（Ｃ）は、レジスタテーブル５ｒの構造体の例を示している。レジスタテーブル５ｒは、レジスタ名、レジスタアドレス、出力形式を有する。
【００９１】
次に、上述した図６のステップＳ１１１、図８のステップＳ１３１における、変換プログラム２２０の実行中、埋め込み指示ファイル２０２から埋め込み指示構造体を作成する構造体作成処理について図１１で説明する。
【００９２】
図１１は、変換プログラムを実行するホストＣＰＵによる構造体作成処理を説明するための図である。図１１において、ホストＣＰＵ１１は、埋め込み指示構造体を初期化して（ステップＳ１５１）、埋め込み指示ファイル２０２をオープンする（ステップＳ１５２）。
【００９３】
ホストＣＰＵ１１は、埋め込み指示ファイル２０２の内容を全て終了したか否かを判断する（ステップＳ１５３）。埋め込み指示ファイル２０２の内容を全て終了した場合、埋め込み指示ファイル２０２をクローズして（ステップＳ１５３−２）、この処理を終了する。
【００９４】
一方、埋め込み指示ファイル２０２の内容を全て終了していない場合、ホストＣＰＵ１１は、埋め込み指示ファイル２０２から次の１行を読み出して（ステップＳ１５４）、コメント又は空行か否かを判断する（ステップＳ１５５）。
【００９５】
読み出した１行がコメント又は空行であると判断した場合、ホストＣＰＵ１１は、更に、機能定義の開始か否かを判断する（ステップＳ１５６）。機能定義の開始である場合、ホストＣＰＵ１１は、機能テーブル５ｆを作成して、埋め込み指示ファイル２０２の機能名４ａを機能テーブル５ｆの機能名を設定する（ステップＳ１５７）。
【００９６】
また、ホストＣＰＵ１１は、埋め込み指示ファイル２０２からメッセージ出力条件式４ｂを参照することによって出力制御規則を取得して、作成した機能テーブル５ｆに設定する（ステップＳ１５８）。更に、ホストＣＰＵ１１は、作成した機能テーブルをカレント機能テーブルとする（ステップＳ１５９）。そして、ホストＣＰＵ１１は、ステップＳ１５３へと戻り、上記同様の処理を繰り返す。
【００９７】
一方、ステップＳ１５６において、機能定義の開始でないと判断した場合、ホストＣＰＵ１１は、埋め込み指示ファイル２０２のレジスタ情報４ｃからレジスタ名４ｃ−１、レジスタアドレス４ｃ−２、メッセージ出力形式４ｃ−３を取得する（ステップＳ１６０）。取得したレジスタ名４ｃ−１、レジスタアドレス４ｃ−２、メッセージ出力形式４ｃ−３を用いて、レジスタテーブル５ｒを作成して（ステップＳ１６１）、作成したレジスタテーブル５ｒをカレント機能テーブルに追加し（ステップＳ１６２）、この処理を終了する。
【００９８】
図６のステップＳ１１７及び図８のステップＳ１３７において、バイナリファイル２１０に組み込む、ターゲット装置３０の記憶領域２１４に必要な領域を確保するサブプログラムが確保し初期化する記憶領域（「機能出力状態保存領域」）の構成について図１２で説明する。
【００９９】
図１２は、機能出力状態保存領域の例を示す図である。図１２では、バイナリファイル２１０内のコードが実行されることによって、使用される記憶領域２１４の一部が示されている。ターゲット装置３０の記憶領域２１４内には、埋め込み指示ファイル２０２に記載の機能毎に一つの機能出力状態保存領域７が確保される。
【０１００】
図１３は、各機能出力状態保存領域の構成例を示す図である。図１３において、機能出力状態保存領域７は、出力制御フラグ、タイマー値、タイマー設定値、出力ルーチン等の値を含む。
【０１０１】
次に、図７のステップＳ１２８及び図９のステップＳ１４７において、置き換えたＩＰマクロへのレジスタアクセス命令が実行する処理について図１４で説明する。図１４は、ＩＰマクロへのレジスタアクセス命令が実行する処理を説明するための図である。ＩＰマクロへのレジスタアクセス命令は、ターゲットＣＰＵ２１１によって実行される。図１４に示す処理では、タイマーがひとつのみ利用できる場合で説明する。
【０１０２】
図１４において、ターゲットＣＰＵ２１１は、ＩＰマクロへのレジスタアクセス命令に従って、ＩＰマクロへのレジスタアクセスを行い（ステップＳ１７１）、タイマー割込ハンドラが設定されているか否かを判断する（ステップＳ１７２）。タイマー割込ハンドラが未設定であると判断した場合、ターゲットＣＰＵ２１１は、タイマー割込ハンドラを設定し、タイマー間隔を設定してタイマーを起動して（ステップＳ１７２−２）、ステップＳ１７３へと進む。
【０１０３】
一方、タイマー割込ハンドラが設定されていると判断した場合、ターゲットＣＰＵ２１１は、レジスタへの書き込みか否かを判断する（ステップＳ１７３）。レジスタからの読み出しであると判断した場合、ターゲットＣＰＵ２１１は、機能出力状態保存領域７の出力制御フラグ（図１３）が「１」に設定されているか否かを判断する（ステップＳ１７３−２）。出力制御フラグ（図１３）が「１」に設定されている場合、ターゲットＣＰＵ２１１は、機能出力状態保存領域７で指定されている出力ルーチンを利用してメッセージ出力装置２１７にメッセージを出力して（ステップＳ１７３−４）、この処理を終了する。一方、出力制御フラグ（図１３）が「０」に設定されている場合、ターゲットＣＰＵ２１１は、この処理を終了する。
【０１０４】
一方、ステップＳ１７３において、レジスタへの書き込みであると判断した場合、ターゲットＣＰＵ２１１は、タイマー設定値を、機能出力状態保存領域７のタイマー値に規定の出力時間を示すタイマー値を加算した値に設定する（ステップＳ１７４）。
【０１０５】
更に、ターゲットＣＰＵ２１１は、機能出力状態保存領域７の出力制御フラグに「１」を設定し（ステップＳ１７５）、機能出力状態保存領域７に指定される出力ルーチンを利用してメッセージ出力装置２１７にメッセージを出力して（ステップＳ１７６）、この処理を終了する。
【０１０６】
次に、図６のステップＳ１１８及び図８のステップＳ１３８において、ターゲットＣＰＵ２１１によってバイナリファイル２１０内のコードが実行されることによって、呼び出されるタイマー割込ハンドラのサブプログラムによる処理を図１５で説明する。
【０１０７】
図１５は、タイマー割込ハンドラのサブプログラムによる処理を説明するための図である。図１５において、ターゲットＣＰＵ２１１は、ターゲット装置３０の記憶領域２１４内の機能毎に、機能出力状態保存領域７に設定されたタイマー値をインクリメントして、機能出力状態保存領域７のタイマー設定値と比較して一致していれば、該当機能の出力を停止するために同機能の機能出力状態保存領域７の出力制御フラグを「０」に設定する（ステップＳ１８１）。
【０１０８】
その後、ターゲットＣＰＵ２１１は、タイマー割込要因をクリアー（初期化）して（ステップＳ１８２）、タイマー割込ハンドラを終了する。
【０１０９】
上記処理によって、不要なメッセージの出力を抑止することができる。機能Ｂの検証における、第１実施例の適用の有無によるメッセージの出力例について図１６で説明する。図１６は、メッセージの出力例を示す図である。
【０１１０】
図１６（Ａ）では、第１実施例の適用の無い場合のメッセージ出力６ａが示されている。メッセージ出力６ａでは、機能Ｂに関する状態レジスタ「ＥＰ０＿Ｓ」及び制御レジスタ「ＥＰ０＿Ｃ」以外のレジスタに関するメッセージが含まれている。
【０１１１】
図１６（Ｂ）では、第１実施例の適用の無い場合のメッセージ出力６ｂが示されている。メッセージ出力６ｂでは、機能Ｂに関する状態レジスタ「ＥＰ０＿Ｓ」及び制御レジスタ「ＥＰ０＿Ｃ」のメッセージのみが含まれている。
【０１１２】
次に、第１実施例を適用した際の動作の流れについて図１７で説明する。図１７は、検証時の通信例を示す図である。
【０１１３】
図１７（Ａ）では、通信を示す図の凡例を示している。接続先デバイス２１３以外のターゲット装置３０の構成部分を評価環境３００で表す。接続先デバイス２１３と評価環境３００とはＵＳＢバス８ｓで接続される。接続先デバイス２１３と評価環境３００間の通信は、パケット８ｐで行われる。
【０１１４】
図１７（Ｂ）では、通信に応じたメッセージが出力される得る出力状態を示している。図１７（Ｂ）において、接続先デバイス２１３から評価装置３００へＳＥＴＵＰパケット８ｐ−１が送信される。
（出力状態Ｉ）ＩＰマクロ２１２がパケット８ｐ−１を検出して割込みを発生させる。
（出力状態ＩＩ）ドライバソフトウェアの割込みルーチンでパケット受信を検出する。
（出力状態ＩＩＩ）そして、ドライバソフトウェアが該当する機能のレジスタに値を書き込む。
【０１１５】
次に、評価環境３００から接続先デバイス２１３へＤＡＴＡパケット８ｐ−２が送信され、接続先デバイス２１３から評価環境３００へＡＣＫパケット８ｐ−３が送信されることによりデータの転送が行われる。
（出力状態ＩＶ）ドライバソフトウェアが該当する機能のレジスタから値を読み出して、ドライバソフトウェアが該当する機能のレジスタに値を書き込む。そして、（出力状態ＩＩＩ）以降、所定時間（例えば、１秒）の間、レジスタアクセス時にメッセージを出力する。
（出力状態Ｖ）（出力状態ＩＩＩ）から所定時間（１秒）経過後、メッセージの出力が停止される。
【０１１６】
上述した（出力状態Ｉ）から（出力状態Ｖ）の各状態での、第１実施例の適用無しの場合と、第１実施例の適用有りの場合との、メッセージの出力量の違いについて図１８で説明する。図１８は、メッセージの出力量の違いを説明するための図である。図１８では、図１７（Ｂ）における各出力状態でのメッセージの出力例を示している。「適用無」は、第１実施例の適用が無い場合を示し、「適用有」は、第１実施例の適用が有る場合を示す。
【０１１７】
（出力状態Ｉ）により、パケット待ちとなる。「適用無」では、状態レジスタ「ＥＰ０＿Ｓ」及び制御レジスタ「ＥＰ０＿Ｃ」の値を示すメッセージの出力が繰り返されるが、「適用有」では、出力されない。
【０１１８】
（出力状態ＩＩ）により、割込みルーチンの起動後の状態になると、「適用無」では、状態レジスタ「ＥＰ０＿Ｓ」及び制御レジスタ「ＥＰ０＿Ｃ」の値を示すメッセージの出力が繰り返されるが、「適用有」では、出力されない。
【０１１９】
（出力状態ＩＩＩ）により、割込み要因の判定結果から該当機能（この場合はEndpoint#1へのパケット送受信処理）へのレジスタに対する書き込みが行われる。「適用無」では、状態レジスタ「ＥＰ０＿Ｓ」及び制御レジスタ「ＥＰ０＿Ｃ」に関するメッセージの出力が繰り返される。一方、「適用有」では、状態レジスタ「ＥＰ０＿Ｓ」及び制御レジスタ「ＥＰ０＿Ｃ」に関するメッセージが夫々一回出力されるのみである。
【０１２０】
（出力状態ＩＶ）により、レジスタへの書き込み、レジスタからの読み出しが行われる。「適用無」では、状態レジスタ「ＥＰ０＿Ｓ」及び制御レジスタ「ＥＰ０＿Ｃ」の値を示すメッセージの出力が繰り返される。一方、「適用有」では、状態レジスタ「ＥＰ０＿Ｓ」及び制御レジスタ「ＥＰ０＿Ｃ」がアクセスされた時にのみメッセージが出力される。
【０１２１】
（出力状態Ｖ）において、（出力状態ＩＩＩ）から所定時間（１秒）経過後、「適用無」では、状態レジスタ「ＥＰ０＿Ｓ」及び制御レジスタ「ＥＰ０＿Ｃ」の値を示すメッセージの出力が繰り返される。一方、「適用有」では、メッセージの出力は行われない。
【０１２２】
次に、第１実施例において、ＩＣＥ装置２２４を用いずに、ターゲットＣＰＵ２１１での動作も一つのＣＰＵで行うようにしたデバッグシステムの他の例について以下に説明する。
【０１２３】
図１９は、第１実施例に係るデバッグシステムの他の構成例を示す図である。図１９に示すデバッグシステム１０１ａは、一台のコンピュータ装置１０−２で実現される。コンピュータ装置１０−２は、ＣＰＵ７１２と、記憶領域７１３と、ＩＰマクロ７１４と、タイマー７１５と、メッセージ出力装置７１６と、記憶領域７１７と、接続先デバイス２１３とを有する。デバッグシステム１０１ａは、メッセージ出力制御装置に相当する。
【０１２４】
コンピュータ装置１０−２は、ＣＰＵ７１２によって制御され、デバッガ機能を含む。記憶領域７１３は、ＣＰＵ７１２が処理を実行するために用いられる記憶領域であり、例えば、ＣＰＵ７１２が処理中に使用するＲＡＭ等のメモリ装置によって提供される記憶領域である。記憶領域７１７は、実行可能形式や埋め込み指示ファイル、プログラムのソースコード、コンパイラ及びリンカ等のプログラムを格納する記憶領域であり、例えば、ハードディスクデバイス等の補助記憶装置によって提供される記憶領域である。記憶領域７１３と記憶領域７１７とが、図２に示す記憶部１３０の記憶領域に相当する。
【０１２５】
記憶領域７１７には、ソースコード２００と、埋め込み指示ファイル２０２と、バイナリファイル７１０と、変換プログラム７２０とが記憶される。ソースコード２００は、ＩＰマクロ７１４を制御するプログラムのソースコードである。埋め込み指示ファイル２０２は、マクロ毎に、ＩＰマクロ仕様・規格書２０２に基づいて作成され、所定レジスタを監視してその値を含むメッセージを出力するためのコードを含むデータファイルである。バイナリファイル７１０は、実行可能形式のバイナリファイルである。変換プログラム２２０は、埋め込み指示ファイル２０２と、プログラムのソースコード２００とを入力して、実行形式のプログラムを出力する埋め込み（クロス）コンパイラ及びリンカプログラムである。ＩＰマクロ仕様・規格書２０１は、データファイルの場合は、記憶領域７１７に格納されていても良い。
【０１２６】
ＩＰマクロ７１４は、通信制御を行う機能部分に相当し、バス７１９を介して接続先デバイス２１３と通信を行う。タイマーモジュール７１５は、図１のタイマーモジュール２１８に相当し、メッセージの出力判定に利用されるタイマー機能である。メッセージ出力装置７１６は、図１のメッセージ出力装置２１７に相当し、プログラム実行中の指示によりメッセージを出力する装置であり、ＣＲＴ（Cathode Ray Tube）、ＬＣＤ（Liquid Crystal Display）等の表示部を有する。
【０１２７】
図１９に示す構成のデバッグシステムにおける、開発者による処理の流れを説明する図２０で説明する。図２０は、図１９のデバッグシステム１０１ａにおける開発者による処理の流れを説明するための図である。図２０において、開発者は、ＩＰマクロ仕様・規格書２０１に基づいて、埋め込み指示ファイル２０２を手作業で作成し、記憶領域７１７に保存する（ステップＳ２０１）。開発者は、コンピュータ装置１０−２に変換プログラム７２０の実行を指示する（ステップＳ２０２）。変換プログラム７２０は記憶領域２２１にロードされ、ホストＣＰＵ１１によって実行される。変換プログラム７２０の実行によって、バイナリファイル７１０が作成され、記憶領域７１７に保存される。
【０１２８】
開発者は、コンピュータ装置１０−２に対して、検証を開始させる（ステップＳ２０３）。ＣＰＵ７１２がバイナリファイル７１０に従って動作することによりＩＰマクロ７１４が制御され、ＩＰマクロ７１０は、バス７１９経由で接続先デバイス２１３と通信を行う。（ステップＳ２０４）。その際、埋め込み指示ファイル２０２で指定したレジスタの値などを含むメッセージがメッセージ出力装置７１６に出力される。
【０１２９】
開発者は、メッセージ出力装置７１６に出力されたメッセージや接続先デバイス２１３で出力されるメッセージ等を確認して（ステップＳ２０５）、問題が有るか否かを判断する（ステップＳ２０６）。開発者は、問題が有ると判断した場合、問題に関するメッセージを解析する（ステップＳ２０７）。
【０１３０】
開発者は、問題の解析にメッセージが不足しているか否かを判断する（ステップＳ２０８）。開発者は、メッセージは十分であると判断した場合、問題を解決するためにソースコード２００を修正して（ステップＳ２０９）、ステップＳ２０２へと戻る。一方、開発者は、メッセージが不足していると判断した場合、埋め込み指示ファイル２０２を修正、追加して、記憶領域７１７に保存し（ステップＳ７１０）、ステップＳ２０２へと戻る。
【０１３１】
ステップＳ２０６において、開発者は、問題が無いと判断した場合、この処理（作業）を終了する。
【０１３２】
上述したステップＳ２０２における、開発者による実行指示に従って、ホストＣＰＵ１１による変換プログラム２２０の実行中、ＩＰマクロ２１２へのレジスタ操作ＡＰＩが利用されるソースコード２００からバイナリファイル７１０を作成するまでのフローを図６で説明する。
【０１３３】
次に、第２実施例に係るデバッグシステムの構成例について説明する。図２１は、第２実施例に係るデバッグシステムの構成例を示す図である。図２１に例示されるデバッグシステム１０２の構成において、図１に例示されるデバッグシステム１０１との違いは、出力判定ルーチン２３０と、ヘッダファイル２３１と、変換プログラム２２０の代わりに変換プログラム２４０とを有する点であり、その他の構成は同様であるので、その説明を省略する。デバッグシステム１０２は、メッセージ出力制御装置に相当する。
【０１３４】
出力判定ルーチン２３０は、メッセージの出力を判定するためのルーチンを予めコンパイラによりライブラリとしたものである。ヘッダファイル２３１は、ライブラリで定義されている出力判定ルーチン２３０のインタフェースを定義したヘッダファイルである。
【０１３５】
変換プログラム２４０は、埋め込み指示ファイル２０２と、プログラムのソースコード２００とを入力し、ソースコード２００内のＩＰマクロへのアクセス部分を、出力判定ルーチン２３０とヘッダファイル２３１とで定義されたＡＰＩに置き換える機能と、置き換えた結果をコンパイル及びリンクして実行形式のプログラムであるバイナリファイル２１０を作成するプログラムである。変換プログラム２４０がホストＣＰＵ１１によって実行されて実現する処理部が、バイナリファイル２１０を作成する作成部に相当する。
【０１３６】
変換プログラム２４０による、ホストＣＰＵ１１によって実行可能な形式であるバイナリファイル２１０を作成する実行可能形式ファイルへの作成処理を図２２で説明する。図２２は、実行可能形式作成処理を説明するための図である。図２２において、開発者が、ＩＰマクロ２１２へのレジスタ操作ＡＰＩと同じＡＰＩ形式でヘッダファイル２３１を作成する（ステップＳ２２１）。また、開発者が、埋め込み指示ファイル２０２の内容に応じて、出力判定ルーチン２３０を作成する（ステップＳ２２２）。
【０１３７】
開発者は、コンパイル及びリンク時に指定するＩＰマクロ２１２へのレジスタ操作ＡＰＩへのヘッダとライブラリのディレクトリを、作成した出力判定ルーチン２３０及びヘッダファイル２３１を格納したディレクトリに変更する（ステップＳ２２３）。
【０１３８】
そして、開発者が、コンパイル及びリンクをホストＣＰＵ１１に実施させ、バイナリファイル２１０を作成させる（ステップＳ２２４）。作成されたバイナリファイル２１０は、記憶領域２２２に格納される。
【０１３９】
埋め込み指示ファイル２０２から出力判定ルーチン２３０を作成する際には、開発者の手作業で各機能判定や出力形式を埋め込むことは可能であるが、ツールなどにより、埋め込み指示ファイル２０２とＩＰマクロ２１２のメモリマップ情報などから自動的に作成することも可能である。
【０１４０】
また、ステップＳ２２４による開発者の指示に応じて、バイナリファイル２１０を作成する作成処理は、図６及び図７、又は、図８及び図９の説明と同様であるので、詳細な説明を省略する。
【０１４１】
上記第１又は第２実施例において、レジスタへの書き込みを条件としてタイマーによる時間測定を開始していたが、他の条件、例えば、レジスタの特定のフィールドがある値になったことを条件としても良い。
【０１４２】
また、タイマーが使用できない環境では、実行形式中に一定のコード毎にカウンターをインクリメントする仕組みを付加することによっても実現可能である。
【０１４３】
上述したような第１又は第２実施例を適用した場合には、不要なメッセージの出力を削減すると共に、図２３に例示されるような、適用が無い場合の問題点を解消することができる。図２３は、適用することによって解消可能な問題点の例を説明するための図である。図２３において、第１又は第２実施例を適用しなかった場合には、メッセージ出力部分を含むドライバソースコードに相当する適用無コード２２ａに対して手作業でメッセージ出力部分の削除が行われる。
【０１４４】
作業後適用無コード２２ａ'は、メッセージ出力部分の削除が行われた状態を示す。手作業で削除が行われた場合、例えば、誤消去２２ｂのように、誤って、本来必要なレジスタへのアクセスの記述がコメント文に設定されてしまい実行されない、といった問題がある。また、削除対象のメッセージ出力の記述の消去し忘れ２２ｃなどの問題も発生する。
【０１４５】
しかしながら、第１又は第２実施例を適用した場合には、開発者によるメッセージ出力部分の削除等の手作業が不要となるため、誤消去２２ｂ及び消去し忘れ２２ｃなどを解消することができる。
【０１４６】
上述したように、通信系のＩＰマクロのドライバソフトウェアのデバッグのために、ソフトウェアのデバッグ用のメッセージ出力を行うソフトウェアプログラムに対して、通信系ＩＰマクロの機能を分類し、その機能分類に応じてＩＰマクロのレジスタを分類しておく。そして、ドライバソフトウェアのソースコード２００を解析し、埋め込み指示ファイル２０２に基づいて、当該機能のレジスタの値を含むデバッグ用のメッセージを出力させるプログラムを埋め込む。この埋め込まれたプログラムでは、アクセス時間から一定時間の間に当該機能の全レジスタを一定間隔で出力、又は、同機能のレジスタへのアクセスの時に出力する。この際の時間管理はドライバソフトウェアが走行する環境に搭載されているタイマーハードウェアを用いればよい。
【０１４７】
本発明は、具体的に開示された実施例に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【０１４８】
以上の第１及び第２実施例を含む実施形態に関し、更に以下の付記を開示する。
（付記１）
ソースコードと、メッセージ出力対象となるレジスタを指定した埋め込み指示ファイルとを記憶した記憶部と、
前記ソースコード内の、前記記憶部に記憶された前記埋め込み指示ファイルによって指定される前記レジスタへアクセスする記述を、出力期間の間、該レジスタの値を含むメッセージを出力装置に出力する記述を含む置き換え内容で置き換えて、該内容で置き換えられた該ソースコードから実行形式のバイナリファイルを前記記憶部に作成する作成部と
を有することを特徴とするコンピュータ装置。
（付記２）
前記埋め込み指示ファイルによって、機能毎に、前記出力期間を指定するメッセージ出力条件式と、レジスタ情報とが指定され、
前記置き換え内容は、メッセージ出力条件式によって指定されるタイマーに設定される前記出力期間と、対象のレジスタの指定情報を含むレジスタ情報によって指定されるメッセージ出力形式とを含むことを特徴とする付記１記載のコンピュータ装置。
（付記３）
前記作成部は、前記埋め込み指示ファイルに基づいて、機能毎に前記出力期間が設定される機能構造体と、該機能構造体から接続される前記レジスタ情報からレジスタ構造体とを含む埋め込み指示構造体を前記記憶部に作成することを特徴とする付記２記載のコンピュータ装置。
（付記４）
前記バイナリファイルを実行し、前記指定されたレジスタへのアクセス時に、該レジスタの値を含むメッセージの出力を開始し、該アクセス時に起動されたタイマーの設定値に前記出力期間を加算して設定することによって、該出力期間後、該メッセージの出力装置への出力を停止することを特徴とする付記２又は３のいずれか一項記載のコンピュータ装置。
（付記５）
前記ソースコードから読み出した記述が、前記記憶部に記憶された前記埋め込み指示ファイルによって指定される前記レジスタへアクセスする記述であるか否かを判定する判定ルーチンと、ライブラリで定義されている判定ルーチンのインタフェースを定義したヘッダファイルとを有することを特徴とする付記１乃至３のいずれか一項記載のコンピュータ装置。
（付記６）
前記ソースコードは、通信制御を行うマクロを記述したコードであることを特徴とする付記１乃至５のいずれか一項記載のコンピュータ装置。
（付記７）
コンピュータによって実行されるメッセージ出力制御方法であって、
記憶部に記憶されたソースコードと、メッセージ出力対象となるレジスタを指定した埋め込み指示ファイルとを入力し、
前記ソースコード内の、前記埋め込み指示ファイルによって指定される前記レジスタへアクセスする記述を、出力期間の間、該レジスタの値を含むメッセージを出力装置に出力する記述を含む置き換え内容で置き換え、
前記内容で置き換えられた前記ソースコードから実行形式のバイナリファイルを前記記憶部に作成する
ことを特徴とするメッセージ出力制御方法。
（付記８）
記憶部に記憶されたソースコードと、メッセージ出力対象となるレジスタを指定した埋め込み指示ファイルとを入力し、
前記ソースコード内の、前記埋め込み指示ファイルによって指定される前記レジスタへアクセスする記述を、出力期間の間、該レジスタの値を含むメッセージを出力装置に出力する記述を含む置き換え内容で置き換え、
前記内容で置き換えられた前記ソースコードから実行形式のバイナリファイルを前記記憶部に作成する
処理をコンピュータに実行させるプログラム。
【符号の説明】
【０１４９】
１０          ホスト装置
１１          ホストＣＰＵ
１２          主記憶装置
１３          補助記憶装置
１４          入力装置
１５          表示装置
１８          ドライバ
１９          記憶媒体
１０１        デバッグシステム
２００        ソースコード
２０１        ＩＰマクロ仕様・規格書
２０２        埋め込み指示ファイル
２１０        バイナリファイル
２１１        ターゲットＣＰＵ
２１２        ＩＰマクロ
２１３        接続先デバイス
２１４        記憶領域
２１７        メッセージ出力装置
２１８        タイマーモジュール
２２０        変換プログラム
２２１        記憶領域
２２４        ＩＣＥ装置
２３０        出力判定ルーチン
２３１        ヘッダファイル
２４０        変換プログラム
【図１】
0005906789.tif 000002
【図２】
0005906789.tif 000003
【図３】
0005906789.tif 000004
【図４】
0005906789.tif 000005
【図５】
0005906789.tif 000006
【図６】
0005906789.tif 000007
【図７】
0005906789.tif 000008
【図８】
0005906789.tif 000009
【図９】
0005906789.tif 000010
【図１０】
0005906789.tif 000011
【図１１】
0005906789.tif 000012
【図１２】
0005906789.tif 000013
【図１３】
0005906789.tif 000014
【図１４】
0005906789.tif 000015
【図１５】
0005906789.tif 000016
【図１６】
0005906789.tif 000017
【図１７】
0005906789.tif 000018
【図１８】
0005906789.tif 000019
【図１９】
0005906789.tif 000020
【図２０】
0005906789.tif 000021
【図２１】
0005906789.tif 000022
【図２２】
0005906789.tif 000023
【図２３】
0005906789.tif 000024