以下、本発明の実施の形態を図面に基づいて説明する。本実施例では、通信系IPマクロの下記の特徴を利用することにある。
(1)通信系IPマクロがサポートする機能は、ほぼ対向側(通信相手先)とのやりとりの結果、状態変化が発生する。
(2)状態変化が発生した場合、その影響はその機能に応じて一定時間内で収束し、一定時間後は、次の状態変化が対向側とのやり取りの結果、再度発生するまでは、状態変化が起きない。
(3)通信系IPマクロはそのサポートする機能毎にレジスタが分類されていることが殆どであり、共通している機能は極少数である。
ここでは、USB(Universal Serial Bus)の機能(「USB Function」)のIPマクロを利用して説明するが、本実施例は、USB規格のIPマクロに限定するものではなく、他の通信系IPマクロ(SATA(Serial Advanced Technology Attachment)、PCI−Express、Ethernet(登録商標)など)にも適用が可能である。
「USB Function」には、
(機能A)USB Bus制御
(機能B)Endpoint管理:Default-Endpoint(Endpoint#0)への制御データ転送
(機能C)Bulkなどのデータ転送(バルクデータ転送)
を主に含む。機能A、機能B、及び機能Cを実現するためのレジスタはそれぞれ複数あるが、本実施例では、下記のレジスタの値の状態変化の確認と、制御を実行する。実際のIPマクロでは、システム上のCPUへの割り込み通知用途などで、更に多くのレジスタが必要であるが、ここでは省略する。
上記機能Aの検証では、状態変化を確認するための状態レジスタ「USB_S」と、状態を制御するための制御レジスタ「USB_C」とを対象とする。
上記機能Bの検証では、状態変化を確認するための状態レジスタ「EP0_S」と、状態を制御するための制御レジスタ「EP0_C」とを対象とする。
上記機能Cの検証では、状態変化を確認するための状態レジスタ「EP1_S」と、状態を制御するための制御レジスタ「EP1_C」)とを対象とする。
以下、上記機能BのDefault-Endpointへの制御データ転送に着目して説明する。制御データ転送では、ドライバソフトウェアは、下記手順を実行する。
(B−1)制御データ転送の発生の有無を状態レジスタ「EP0_S」で確認する。
(B−2)上記(B−1)で制御データ転送が発生していれば、制御データのパケットサイズをチェックして、状態レジスタ「EP0_S」から転送種別を読み出す。
そして、
(B−3)読み出し完了フラグを制御レジスタ「EP0_C」に設定する。
(B−4)上記(B−2)で読み出した転送種別に応じて制御レジスタに対向側に返すべきパケットのデータ値を必要な回数(バイト数)を設定する。
(B−5)状態レジスタ「EP0_S」を確認し、制御レジスタ「EP0_C」に設定した値(返送パケット)が全て設定し終わったことを書き込む。
次に、
(B−6)対向側からの受領確認パケットの到着を状態レジスタ「EP0_C」で確認する。到着するまで、確認を継続する。
(B−7)受領確認パケットの到着を確認したら、その内容を状態レジスタ「EP0_C」から読み出し、読み出し完了フラグを制御レジスタ「EP0_C」に設定する。
ドライバソフトウェア内において上述した手順(B−1)から手順(B−7)のフローを実現する部分でのデバッグの際、手順(B−3)の設定以降にて、機能(B)の各レジスタの内容が手順(B−7)の完了までの期間あれば、有益なデバッグとなりえる。手順(B−3)よりも前、又は、手順(B−7)以降の状態レジスタ「EP0_C」及び制御レジスタ「EP0_C」の値については、特にデバッグに必要な値とはなり得ない。
そこで、手順(B−3)から手順(B−7)の期間の機能(B)に関連する状態レジスタ「EP0_C」及び制御レジスタ「EP0_C」の値のみが逐次出力されれば、必要な情報が全て得られ、かつ、不要な情報の出力を抑制することができる。
手順(B−3)の開始の判定については、機能(B)に関連する状態レジスタ「EP0_C」及び制御レジスタ「EP0_C」への書き込みで判断することができる。
出力の停止条件については、手順(B−7)後に停止されるのであればよいことになる。しかし、必ずしも手順(B−7)の判定が他のレジスタへの書き込み動作の区別を行うことは不可能ではないが、煩雑となる。複雑な判定ロジックを組み込めば、それだけ新たに問題が発生する可能性がある。
通信系のプロトコルでは、通常、応答時間に上限が定められており、それ以降の情報は不要にすることが可能である。手順(B−3)からその応答時間以内のレジスタの値の出力があれば良いことになる。例えば、複数の通信手順があるため、その規格で定められた時間のN倍(所定倍の時間)に設定する。所定倍(N倍)の時間は、規格に基づいて定めることが可能な時間長以内とする。
上述したようなメッセージ(ログメッセージ)の出力制御を実現するための構成について、以下に説明する。
図1は、第1実施例に係るデバッグシステムの構成例を示す図である。図1に例示されるデバッグシステム101は、ホスト装置10と、ICE(In-Circuit Emulator)装置224と、ターゲット装置30とを有する。デバッグシステム101は、メッセージ出力制御装置に相当する。
ホスト装置10は、ICE装置224に接続され、ICE装置224を制御して、ターゲット装置30の検証を行なうホストコンピュータである。ホスト装置10は、後述される図2に示されるハードウェア構成を有する。
ホスト装置10は、ホストCPU11によって制御され、記憶領域221と222とを有する。記憶領域221は、ホストCPU11が処理を実行するために用いられる記憶領域であり、例えば、ホストCPU11が埋め込み(クロス)コンパイラ及びリンカプログラムを実行する際に使用される。記憶領域222は、プログラムのソースコード、第1実施例に係る埋め込み指示ファイル、バイナリファイル等を格納する記憶領域である。
後述される図2に示すハードウェア構成において、記憶領域221は、RAM(Random Access Memory)等を有する主記憶装置12の記憶領域に相当し、記憶領域222は、ハードディスクデバイス等を有する補助記憶装置13に相当する。ホストCPU11と、記憶領域221と、記憶領域222とは、バス223で接続される。
記憶領域222には、ソースコード200と、埋め込み指示ファイル202と、バイナリファイル210と、変換プログラム220とが記憶される。ソースコード200は、IPマクロ212を制御するプログラム(ドライバソフトウェア)のソースコードである。埋め込み指示ファイル202は、マクロ毎に、IPマクロ仕様・規格書202に基づいて作成され、所定レジスタを監視してその値を含むメッセージを出力するためのコードを含むデータファイルである。
バイナリファイル210は、実行可能形式のバイナリファイルであり、埋め込み指示ファイル202に従って、検証対象の機能に関するレジスタのうち、指定されたレジスタのみメッセージ出力させるようにしたバイナリファイル210である。
変換プログラム220は、埋め込み指示ファイル202と、プログラムのソースコード200とを入力して、実行形式のプログラム(バイナリファイル210)を出力する埋め込み(クロス)コンパイラ及びリンカプログラムである。変換プログラム220がホストCPU11によって実行されて実現する処理部が、バイナリファイル210を作成する作成部に相当する。
IPマクロ仕様・規格書201は、データファイルの場合は、記憶領域222に格納されていても良い。
ICE装置222は、ソフトウェアとハードウェアの検証を行なうための装置であり、ホストCPU11によって実行される制御プログラムの指示に従ってバイナリファイル210をターゲット装置30の記憶領域214に転送して、ターゲット装置30のターゲットCPU211にバイナリファイル210の内容に従って動作させる装置である。
ターゲット装置30は、ターゲットCPU211と、IPマクロ212と、接続先デバイス213と、記憶領域214と、メッセージ出力装置217と、タイマーモジュール218とを有する。
ターゲットCPU211は、実行可能形式のプログラムを走行させるCPUである。IPマクロ212は、通信制御を行う機能部分に相当し、ターゲットCPU211に接続される。接続先デバイス213は、IPマクロ212に接続され通信を行う装置である。記憶領域214は、ターゲットCPU211で実行するプログラムを格納する記憶領域であり、例えば、RAM等のメモリ装置である。
メッセージ出力装置217は、プログラム実行中の指示によりメッセージを出力する装置であり、CRT(Cathode Ray Tube)、LCD(Liquid Crystal Display)等の表示部を有する。タイマーモジュール218は、メッセージの出力判定に利用されるタイマー機能である。
ターゲットCPU211と、IPマクロ212と、記憶領域214と、メッセージ出力装置217と、タイマーモジュール218とは、バス215で接続される。また、接続先デバイス213は、バス216によってIPマクロ212に接続される。
第1実施例に係るホスト装置10は、図2に示すようなハードウェア構成を有する。図2は、ホスト装置のハードウェア構成を示す図である。図2において、ホスト装置10は、コンピュータによって制御される端末であって、ホストCPU(Central Processing Unit)11と、主記憶装置12と、補助記憶装置13と、入力装置14と、表示装置15と、ドライブ18とを有し、バスBに接続される。
ホストCPU11は、主記憶装置12に格納された制御プログラムに従ってホスト装置10を制御すると共に、ICE装置224にターゲット装置30を検証するための指示を行なう。主記憶装置12には、例えば、RAM(Random Access Memory)等が用いられ、ホストCPU11にて実行される制御プログラム、ホストCPU11での処理に必要なデータ、ホストCPU11での処理にて得られたデータ等を格納する。また、主記憶装置12の一部の領域が、ホストCPU11での処理に利用されるワークエリアとして割り付けられている。
補助記憶装置13には、例えば、ハードディスクドライブが用いられ、各種処理を実行するためのプログラム等のデータを格納する。補助記憶装置13に格納されているプログラムの一部が主記憶装置12にロードされ、ホストCPU11に実行されることによって、各種処理が実現される。記憶部130は、主記憶装置12と補助記憶装置13とを有する。
入力装置14は、マウス、キーボード等を有し、ユーザがホスト装置10による処理に必要な各種情報を入力するために用いられる。表示装置15は、ホストCPU11の制御のもとに必要な各種情報を表示する。
ホスト装置10によって行われる処理を実現する制御プログラムは、例えば、CD−ROM(Compact Disc Read-Only Memory)等の記憶媒体19によってホスト装置10に提供される。即ち、プログラムが保存された記憶媒体19がドライブ18にセットされると、ドライブ18が記憶媒体19からプログラムを読み出し、その読み出されたプログラムがバスBを介して補助記憶装置13にインストールされる。そして、プログラムが起動されると、補助記憶装置13にインストールされたプログラムに従ってホストCPU11がその処理を開始する。尚、プログラムを格納する媒体としてCD−ROMに限定するものではなく、コンピュータが読み取り可能な媒体であればよい。コンピュータ読取可能な記憶媒体として、CD−ROMの他に、DVDディスク、USBメモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリであっても良い。
また、ホスト装置10によって行われる処理を実現する制御プログラムが、通信I/F17を介して外部装置から提供されてもよい。或いは、外部装置へ該プログラムを提供し、後述される各処理は外部装置で実現されるように構成してもよい。通信I/F17による通信は無線又は有線に限定されるものではない。
USB通信を例にして、通信プロトコルの階層と、上述したUSBの機能(A)〜(C)との対応について説明する。図3は、通信プロトコルの階層と機能との対応関係を示す図である。図3において、USB通信プロトコル階層2は、IPマクロ仕様・規格書201によって定義され、下層から順に、USB Bus状態、USB EndPoint制御、USB Class制御、上位層を含む。また、各層での処理もIPマクロ仕様・規格書201によって示される。
USB通信プロトコル階層2において、USB Bus状態の層は機能A(USB Bus制御)に相当し、USB EndPoint制御の層は機能B(USB EndPoint制御(EndPoint管理))に相当する。USB Class制御の層と、上位層とは、機能C(USB EndPoint制御(データ転送))に相当する。
次に、埋め込み指示ファイル202の形式について説明する。図4は、埋め込み指示ファイルの形式例を示す図である。図4(A)において、マクロ毎に作成される埋め込み指示ファイル202は、機能種別毎、つまり、機能毎に、対象となるレジスタを指定した、メッセージ出力に関する制御コード4が作成される。各制御コード4によって、機能名4a、メッセージ出力条件式4b、対象となるレジスタ毎のレジスタ情報4cとが示される。
メッセージ出力条件式4bは、対象のレジスタの値を含むメッセージを出力させる時間間隔を示すタイマー時間を指定する。レジスタ情報4cは、図4(B)に例示されるような構成を有する。
図4(B)において、レジスタ情報4cによって、レジスタ名4c−1と、レジスタアドレス4c−2と、メッセージ出力形式4c−3とが指定される。
図5は、図1のデバッグシステム100における開発者による処理の流れを説明するための図である。図5において、開発者は、IPマクロ仕様・規格書201に基づいて、埋め込み指示ファイル202を手作業で作成し、記憶領域222に保存する(ステップS101)。開発者は、ホスト装置10に変換プログラム220の実行を指示する(ステップS102)。変換プログラム220は記憶領域221にロードされ、ホストCPU11によって実行される。変換プログラム220の実行によって、バイナリファイル210が作成され、記憶領域222に保存される。
開発者は、ホスト装置10に対して、ターゲット装置30の検証を開始させる(ステップS103)。ホスト装置10は、ICE装置224により、ターゲット装置30の記憶領域214にバイナリファイル210を転送させ、ターゲット装置30のターゲットCPU211に実行させる。
ターゲットCPU211がバイナリファイル210に従って動作することにより、ターゲットCPU211はIPマクロ212を制御し、バス216経由で接続先デバイス213との通信が実行される(ステップS104)。その際、埋め込み指示ファイル202で指定したレジスタの値などを含むメッセージがメッセージ出力装置217に出力される。
開発者は、メッセージ出力装置217に出力されたメッセージや接続先デバイス213で出力されるメッセージ等を確認して(ステップS105)、問題が有るか否かを判断する(ステップS106)。開発者は、問題が有ると判断した場合、問題に関するメッセージを解析する(ステップS107)。
開発者は、問題の解析にメッセージが不足しているか否かを判断する(ステップS108)。開発者は、メッセージは十分であると判断した場合、問題を解決するためにソースコード200を修正して(ステップS109)、ステップS102へと戻る。一方、開発者は、メッセージが不足していると判断した場合、埋め込み指示ファイル202を修正、追加して、記憶領域222に保存し(ステップS110)、ステップS102へと戻る。
ステップS106において、開発者は、問題が無いと判断した場合、この処理(作業)を終了する。
上述したステップS102における、開発者による実行指示に従って、ホストCPU11による変換プログラム220の実行中、IPマクロ212へのレジスタ操作APIが利用されるソースコード200からバイナリファイル210を作成するまでのフローを図6で説明する。
図6は、変換プログラムを実行するホストCPUによるバイナリファイルの作成処理の一例を説明するための図である。図6において、ホストCPU11は、埋め込み指示ファイル202を読み込んで、埋め込み指示ファイル202の内容に従って、「埋め込み指示構造体」(後述)を記憶領域221に格納する(ステップS111)。ホストCPU11は、未処理のソースコード200が残っているか否かを判断する(ステップS112)。
ホストCPU11は、未処理のソースコード200が残っていると判断した場合、作業用に一時ファイル3fを記憶領域221に作成する(ステップS113)。ホストCPU11は、ソースコードを解析するソースコード解析処理を実行し、その実行結果を作成した一時ファイル3fに保存する(ステップS114)。
その後、ホストCPU11は、一時ファイル3fをコンパイルして、オブジェクトコードを作成する(ステップS115)。また、ホストCPU11は、オブジェクトコードのファイル名を、元のソースコード200のファイル名に基づいて適切な名前に変更する(ステップS116)。
ステップS112において、未処理のソースコード200が残っていない場合、ホストCPU11は、埋め込み指示の内容に応じて、ターゲット装置30の記憶領域214に必要な領域を確保するサブプログラムを、オブジェクトファイルとして作成させる(ステップS117)。また、ホストCPU11は、割り込みハンドラでの処理を実行するサブプログラムをオブジェクトファイルとして作成する(ステップS118)。
ホストCPU11は、全オブジェクトファイルをリンクして、バイナリファイル210を作成して(ステップS119)、この処理を終了する。
上述したステップS114におけるソースコード解析処理を図7で説明する。図7は、ステップS114におけるソースコード解析処理を説明するための図である。図7において、ホストCPU11は、ソースコード200の最後か否かを判断する(ステップS121)。ホストCPU11は、ソースコード200の最後の場合、この処理を終了する。
ホストCPU11は、Parser(構文解析)により次の構文要素を抽出して(ステップS122)、抽出した構文要素がIPマクロへのレジスタ操作APIか否かを判断する(ステップS123)。ホストCPU11は、抽出した構文要素がIPマクロへのレジスタ操作APIでないと判断した場合、一時ファイル3fに記述をそのまま出力して(ステップS124)、ステップS121へと戻り、上述同様の処理を繰り返す。
一方、ステップS123において、ホストCPU11は、抽出した構文要素がIPマクロへのレジスタ操作APIである場合、レジスタ操作APIの名前から、書き込み区別を判断し、API引数で指定されるアドレスからレジスタアドレスを取得する(ステップS125)。
そして、ホストCPU11は、「埋め込み指示構造体」(図10)を参照して、取得したレジスタアドレスを各レジスタテーブル5r(図10)から検索する(ステップS126)。取得したレジスタアドレスが設定されたレジスタテーブル5rの構造体が特定される。また、ホストCPU11は、レジスタテーブル5rが接続される機能テーブル5f(図10)を取得する(ステップS127)。
次に、ホストCPU11は、機能テーブル5fから出力制御規則を取得し、レジスタテーブル5rから出力形式を取得して置き換え内容を作成し、IPマクロへのレジスタアクセス命令を示す置き換え内容で操作API呼出箇所を置き換える(ステップS128)。ホストCPU11は、置き換えた結果を一時ファイル3fに出力して(ステップS129)、ステップS121へと戻り、上記同様の処理を繰り返す。
一方、ステップS121において、ホストCPU11は、ソースコード200の最後であると判断した場合、この処理を終了する。
上述したステップS102における、開発者による実行指示に従って、ホストCPU11による変換プログラム220の実行中、IPマクロ212へのレジスタ操作APIが利用されていない(例えば、アセンブラコードで記述された)ソースコード200からバイナリファイル210を作成するまでのフローを図8で説明する。
図8は、変換プログラムを実行するホストCPUによるバイナリファイルの作成処理の他の例を説明するための図である。図8において、ホストCPU11は、埋め込み指示ファイル202を読み込んで、埋め込み指示ファイル202の内容に従って、「埋め込み指示構造体」(後述)を記憶領域221に格納する(ステップS131)。ホストCPU11は、未処理のソースコード200が残っているか否かを判断する(ステップS132)。
ホストCPU11は、未処理のソースコード200が残っていると判断した場合、コンパイラにより、ソースコード200をコンパイルしてアセンブラコード200aを記憶部記憶領域222に作成し(ステップS132−2)、作業用に一時ファイル3fを記憶領域221に作成する(ステップS133)。ホストCPU11は、アセンブラコード200aを解析するアセンブラコード解析処理を実行し、その実行結果を記憶領域221に作成した一時ファイル3fに保存する(ステップS134)。
その後、ホストCPU11は、アセンブラにより一時ファイル3fをオブジェクトコードに変換する(ステップS135)。また、ホストCPU11は、オブジェクトコードのファイル名を、元のソースコード200のファイル名に基づいて適切な名前に変更する(ステップS136)。
ステップS132において、未処理のソースコード200が残っていない場合、ホストCPU11は、埋め込み指示の内容に応じて、ターゲット装置30の記憶領域214に必要な領域を確保するサブプログラムを、オブジェクトファイルとして作成させる(ステップS137)。また、ホストCPU11は、割り込みハンドラでの処理を実行するサブプログラムをオブジェクトファイルとして作成する(ステップS138)。
ホストCPU11は、全オブジェクトファイルをリンクして、バイナリファイル210を作成して(ステップS119)、この処理を終了する。
上述したステップS134におけるアセンブラコード解析処理を図9で説明する。図9は、ステップS134におけるアセンブラコード解析処理を説明するための図である。図9において、ホストCPU11は、アセンブラコード200aの終了か否かを判断する(ステップS141)。ホストCPU11は、アセンブラコード200aの終了の場合、この処理を終了する。
ホストCPU11は、次の命令(オペコード及びオペランド)を抽出して(ステップS142)、オペコードがLoad/Storeか否かを判断する(ステップS143)。ホストCPU11は、オペコードがLoad/Storeでないと判断した場合、一時ファイル3fに命令(オペコード及びオペランド)をそのまま出力して(ステップS124)、ステップS141へと戻り、上述同様の処理を繰り返す。
一方、ステップS143において、ホストCPU11は、オペコードがLoad/Storeであると判断した場合、命令からLoad/Store対象のメモリアドレスを取得し、「埋め込み指示構造体」(図10)を参照して、取得したレジスタアドレスを各レジスタテーブル5r(図10)から検索する(ステップS145)。取得したレジスタアドレスが設定されたレジスタテーブル5rの構造体が特定される。また、ホストCPU11は、レジスタテーブル5rが接続される機能テーブル5f(図10)を取得する(ステップS146)。
次に、ホストCPU11は、機能テーブル5fから出力制御規則を取得し、レジスタテーブル5rから出力形式を取得して、Load/Store命令から判断される読み出し、書き込みの区別から置き換え内容を作成し、IPマクロへのレジスタアクセス命令を示す置き換え内容でLoad/Store命令を置き換える(ステップS147)。ホストCPU11は、置き換えた結果を一時ファイル3fに出力して(ステップS148)、ステップS141へと戻り、上記同様の処理を繰り返す。
一方、ステップS141において、ホストCPU11は、アセンブラコード200aの終了であると判断した場合、この処理を終了する。
図10は、埋め込み指示構造体の例を示す図である。図10(A)において、各テーブル間の関係を示している。埋め込み指示構造体によって、複数の機能テーブル5fと、各機能テーブル5fから1以上のレジスタテーブル5rが関連付けられる。
機能テーブル5fは、図4の各制御コード4に相当する。レジスタテーブル5rは、図4の各制御コード4内のレジスタ情報4cに相当する。機能テーブル5fとレジスタテーブル5rとが、埋め込み指示構造体で管理される。
変換プログラム220内では、先頭の機能テーブル5fへのポインタ(先頭機能テーブルポインタ)が示されればよい。次の機能テーブル5fへは、各機能テーブル5fからポインタで示されればよい。次の機能テーブル5fへのポインタ(カレント機能テーブルポインタ)によって、機能テーブル5fがカレント機能テーブルとして設定される。
また、各機能テーブル5fから最初のレジスタテーブル5rへのポインタが示され、各レジスタテーブル5rにおいて、次のレジスタテーブル5rへのポインタが示されればよい。
埋め込み指示構造体は、図10(B)に例示される機能テーブル5fの構造体と、図10(C)に例示されるレジスタテーブル5rの構造体とを含む。図10(B)及び図10(C)では、次のテーブルへのポインタ、機能テーブル5fからレジスタテーブル5rへのポインタ等は省略している。
図10(B)は、機能テーブル5fの構造体の例を示している。構造体によって、機能テーブル5fは、機能名、出力制御規則を含む。機能名は、図4(A)に示す埋め込み指示ファイル202の機能名4aに対応する。出力制御規則は、出力開始条件と出力期間とを有する。出力制御規則は、メッセージ出力情報4bに相当する。図10(C)は、レジスタテーブル5rの構造体の例を示している。レジスタテーブル5rは、レジスタ名、レジスタアドレス、出力形式を有する。
次に、上述した図6のステップS111、図8のステップS131における、変換プログラム220の実行中、埋め込み指示ファイル202から埋め込み指示構造体を作成する構造体作成処理について図11で説明する。
図11は、変換プログラムを実行するホストCPUによる構造体作成処理を説明するための図である。図11において、ホストCPU11は、埋め込み指示構造体を初期化して(ステップS151)、埋め込み指示ファイル202をオープンする(ステップS152)。
ホストCPU11は、埋め込み指示ファイル202の内容を全て終了したか否かを判断する(ステップS153)。埋め込み指示ファイル202の内容を全て終了した場合、埋め込み指示ファイル202をクローズして(ステップS153−2)、この処理を終了する。
一方、埋め込み指示ファイル202の内容を全て終了していない場合、ホストCPU11は、埋め込み指示ファイル202から次の1行を読み出して(ステップS154)、コメント又は空行か否かを判断する(ステップS155)。
読み出した1行がコメント又は空行であると判断した場合、ホストCPU11は、更に、機能定義の開始か否かを判断する(ステップS156)。機能定義の開始である場合、ホストCPU11は、機能テーブル5fを作成して、埋め込み指示ファイル202の機能名4aを機能テーブル5fの機能名を設定する(ステップS157)。
また、ホストCPU11は、埋め込み指示ファイル202からメッセージ出力条件式4bを参照することによって出力制御規則を取得して、作成した機能テーブル5fに設定する(ステップS158)。更に、ホストCPU11は、作成した機能テーブルをカレント機能テーブルとする(ステップS159)。そして、ホストCPU11は、ステップS153へと戻り、上記同様の処理を繰り返す。
一方、ステップS156において、機能定義の開始でないと判断した場合、ホストCPU11は、埋め込み指示ファイル202のレジスタ情報4cからレジスタ名4c−1、レジスタアドレス4c−2、メッセージ出力形式4c−3を取得する(ステップS160)。取得したレジスタ名4c−1、レジスタアドレス4c−2、メッセージ出力形式4c−3を用いて、レジスタテーブル5rを作成して(ステップS161)、作成したレジスタテーブル5rをカレント機能テーブルに追加し(ステップS162)、この処理を終了する。
図6のステップS117及び図8のステップS137において、バイナリファイル210に組み込む、ターゲット装置30の記憶領域214に必要な領域を確保するサブプログラムが確保し初期化する記憶領域(「機能出力状態保存領域」)の構成について図12で説明する。
図12は、機能出力状態保存領域の例を示す図である。図12では、バイナリファイル210内のコードが実行されることによって、使用される記憶領域214の一部が示されている。ターゲット装置30の記憶領域214内には、埋め込み指示ファイル202に記載の機能毎に一つの機能出力状態保存領域7が確保される。
図13は、各機能出力状態保存領域の構成例を示す図である。図13において、機能出力状態保存領域7は、出力制御フラグ、タイマー値、タイマー設定値、出力ルーチン等の値を含む。
次に、図7のステップS128及び図9のステップS147において、置き換えたIPマクロへのレジスタアクセス命令が実行する処理について図14で説明する。図14は、IPマクロへのレジスタアクセス命令が実行する処理を説明するための図である。IPマクロへのレジスタアクセス命令は、ターゲットCPU211によって実行される。図14に示す処理では、タイマーがひとつのみ利用できる場合で説明する。
図14において、ターゲットCPU211は、IPマクロへのレジスタアクセス命令に従って、IPマクロへのレジスタアクセスを行い(ステップS171)、タイマー割込ハンドラが設定されているか否かを判断する(ステップS172)。タイマー割込ハンドラが未設定であると判断した場合、ターゲットCPU211は、タイマー割込ハンドラを設定し、タイマー間隔を設定してタイマーを起動して(ステップS172−2)、ステップS173へと進む。
一方、タイマー割込ハンドラが設定されていると判断した場合、ターゲットCPU211は、レジスタへの書き込みか否かを判断する(ステップS173)。レジスタからの読み出しであると判断した場合、ターゲットCPU211は、機能出力状態保存領域7の出力制御フラグ(図13)が「1」に設定されているか否かを判断する(ステップS173−2)。出力制御フラグ(図13)が「1」に設定されている場合、ターゲットCPU211は、機能出力状態保存領域7で指定されている出力ルーチンを利用してメッセージ出力装置217にメッセージを出力して(ステップS173−4)、この処理を終了する。一方、出力制御フラグ(図13)が「0」に設定されている場合、ターゲットCPU211は、この処理を終了する。
一方、ステップS173において、レジスタへの書き込みであると判断した場合、ターゲットCPU211は、タイマー設定値を、機能出力状態保存領域7のタイマー値に規定の出力時間を示すタイマー値を加算した値に設定する(ステップS174)。
更に、ターゲットCPU211は、機能出力状態保存領域7の出力制御フラグに「1」を設定し(ステップS175)、機能出力状態保存領域7に指定される出力ルーチンを利用してメッセージ出力装置217にメッセージを出力して(ステップS176)、この処理を終了する。
次に、図6のステップS118及び図8のステップS138において、ターゲットCPU211によってバイナリファイル210内のコードが実行されることによって、呼び出されるタイマー割込ハンドラのサブプログラムによる処理を図15で説明する。
図15は、タイマー割込ハンドラのサブプログラムによる処理を説明するための図である。図15において、ターゲットCPU211は、ターゲット装置30の記憶領域214内の機能毎に、機能出力状態保存領域7に設定されたタイマー値をインクリメントして、機能出力状態保存領域7のタイマー設定値と比較して一致していれば、該当機能の出力を停止するために同機能の機能出力状態保存領域7の出力制御フラグを「0」に設定する(ステップS181)。
その後、ターゲットCPU211は、タイマー割込要因をクリアー(初期化)して(ステップS182)、タイマー割込ハンドラを終了する。
上記処理によって、不要なメッセージの出力を抑止することができる。機能Bの検証における、第1実施例の適用の有無によるメッセージの出力例について図16で説明する。図16は、メッセージの出力例を示す図である。
図16(A)では、第1実施例の適用の無い場合のメッセージ出力6aが示されている。メッセージ出力6aでは、機能Bに関する状態レジスタ「EP0_S」及び制御レジスタ「EP0_C」以外のレジスタに関するメッセージが含まれている。
図16(B)では、第1実施例の適用の無い場合のメッセージ出力6bが示されている。メッセージ出力6bでは、機能Bに関する状態レジスタ「EP0_S」及び制御レジスタ「EP0_C」のメッセージのみが含まれている。
次に、第1実施例を適用した際の動作の流れについて図17で説明する。図17は、検証時の通信例を示す図である。
図17(A)では、通信を示す図の凡例を示している。接続先デバイス213以外のターゲット装置30の構成部分を評価環境300で表す。接続先デバイス213と評価環境300とはUSBバス8sで接続される。接続先デバイス213と評価環境300間の通信は、パケット8pで行われる。
図17(B)では、通信に応じたメッセージが出力される得る出力状態を示している。図17(B)において、接続先デバイス213から評価装置300へSETUPパケット8p−1が送信される。
(出力状態I)IPマクロ212がパケット8p−1を検出して割込みを発生させる。
(出力状態II)ドライバソフトウェアの割込みルーチンでパケット受信を検出する。
(出力状態III)そして、ドライバソフトウェアが該当する機能のレジスタに値を書き込む。
次に、評価環境300から接続先デバイス213へDATAパケット8p−2が送信され、接続先デバイス213から評価環境300へACKパケット8p−3が送信されることによりデータの転送が行われる。
(出力状態IV)ドライバソフトウェアが該当する機能のレジスタから値を読み出して、ドライバソフトウェアが該当する機能のレジスタに値を書き込む。そして、(出力状態III)以降、所定時間(例えば、1秒)の間、レジスタアクセス時にメッセージを出力する。
(出力状態V)(出力状態III)から所定時間(1秒)経過後、メッセージの出力が停止される。
上述した(出力状態I)から(出力状態V)の各状態での、第1実施例の適用無しの場合と、第1実施例の適用有りの場合との、メッセージの出力量の違いについて図18で説明する。図18は、メッセージの出力量の違いを説明するための図である。図18では、図17(B)における各出力状態でのメッセージの出力例を示している。「適用無」は、第1実施例の適用が無い場合を示し、「適用有」は、第1実施例の適用が有る場合を示す。
(出力状態I)により、パケット待ちとなる。「適用無」では、状態レジスタ「EP0_S」及び制御レジスタ「EP0_C」の値を示すメッセージの出力が繰り返されるが、「適用有」では、出力されない。
(出力状態II)により、割込みルーチンの起動後の状態になると、「適用無」では、状態レジスタ「EP0_S」及び制御レジスタ「EP0_C」の値を示すメッセージの出力が繰り返されるが、「適用有」では、出力されない。
(出力状態III)により、割込み要因の判定結果から該当機能(この場合はEndpoint#1へのパケット送受信処理)へのレジスタに対する書き込みが行われる。「適用無」では、状態レジスタ「EP0_S」及び制御レジスタ「EP0_C」に関するメッセージの出力が繰り返される。一方、「適用有」では、状態レジスタ「EP0_S」及び制御レジスタ「EP0_C」に関するメッセージが夫々一回出力されるのみである。
(出力状態IV)により、レジスタへの書き込み、レジスタからの読み出しが行われる。「適用無」では、状態レジスタ「EP0_S」及び制御レジスタ「EP0_C」の値を示すメッセージの出力が繰り返される。一方、「適用有」では、状態レジスタ「EP0_S」及び制御レジスタ「EP0_C」がアクセスされた時にのみメッセージが出力される。
(出力状態V)において、(出力状態III)から所定時間(1秒)経過後、「適用無」では、状態レジスタ「EP0_S」及び制御レジスタ「EP0_C」の値を示すメッセージの出力が繰り返される。一方、「適用有」では、メッセージの出力は行われない。
次に、第1実施例において、ICE装置224を用いずに、ターゲットCPU211での動作も一つのCPUで行うようにしたデバッグシステムの他の例について以下に説明する。
図19は、第1実施例に係るデバッグシステムの他の構成例を示す図である。図19に示すデバッグシステム101aは、一台のコンピュータ装置10−2で実現される。コンピュータ装置10−2は、CPU712と、記憶領域713と、IPマクロ714と、タイマー715と、メッセージ出力装置716と、記憶領域717と、接続先デバイス213とを有する。デバッグシステム101aは、メッセージ出力制御装置に相当する。
コンピュータ装置10−2は、CPU712によって制御され、デバッガ機能を含む。記憶領域713は、CPU712が処理を実行するために用いられる記憶領域であり、例えば、CPU712が処理中に使用するRAM等のメモリ装置によって提供される記憶領域である。記憶領域717は、実行可能形式や埋め込み指示ファイル、プログラムのソースコード、コンパイラ及びリンカ等のプログラムを格納する記憶領域であり、例えば、ハードディスクデバイス等の補助記憶装置によって提供される記憶領域である。記憶領域713と記憶領域717とが、図2に示す記憶部130の記憶領域に相当する。
記憶領域717には、ソースコード200と、埋め込み指示ファイル202と、バイナリファイル710と、変換プログラム720とが記憶される。ソースコード200は、IPマクロ714を制御するプログラムのソースコードである。埋め込み指示ファイル202は、マクロ毎に、IPマクロ仕様・規格書202に基づいて作成され、所定レジスタを監視してその値を含むメッセージを出力するためのコードを含むデータファイルである。バイナリファイル710は、実行可能形式のバイナリファイルである。変換プログラム220は、埋め込み指示ファイル202と、プログラムのソースコード200とを入力して、実行形式のプログラムを出力する埋め込み(クロス)コンパイラ及びリンカプログラムである。IPマクロ仕様・規格書201は、データファイルの場合は、記憶領域717に格納されていても良い。
IPマクロ714は、通信制御を行う機能部分に相当し、バス719を介して接続先デバイス213と通信を行う。タイマーモジュール715は、図1のタイマーモジュール218に相当し、メッセージの出力判定に利用されるタイマー機能である。メッセージ出力装置716は、図1のメッセージ出力装置217に相当し、プログラム実行中の指示によりメッセージを出力する装置であり、CRT(Cathode Ray Tube)、LCD(Liquid Crystal Display)等の表示部を有する。
図19に示す構成のデバッグシステムにおける、開発者による処理の流れを説明する図20で説明する。図20は、図19のデバッグシステム101aにおける開発者による処理の流れを説明するための図である。図20において、開発者は、IPマクロ仕様・規格書201に基づいて、埋め込み指示ファイル202を手作業で作成し、記憶領域717に保存する(ステップS201)。開発者は、コンピュータ装置10−2に変換プログラム720の実行を指示する(ステップS202)。変換プログラム720は記憶領域221にロードされ、ホストCPU11によって実行される。変換プログラム720の実行によって、バイナリファイル710が作成され、記憶領域717に保存される。
開発者は、コンピュータ装置10−2に対して、検証を開始させる(ステップS203)。CPU712がバイナリファイル710に従って動作することによりIPマクロ714が制御され、IPマクロ710は、バス719経由で接続先デバイス213と通信を行う。(ステップS204)。その際、埋め込み指示ファイル202で指定したレジスタの値などを含むメッセージがメッセージ出力装置716に出力される。
開発者は、メッセージ出力装置716に出力されたメッセージや接続先デバイス213で出力されるメッセージ等を確認して(ステップS205)、問題が有るか否かを判断する(ステップS206)。開発者は、問題が有ると判断した場合、問題に関するメッセージを解析する(ステップS207)。
開発者は、問題の解析にメッセージが不足しているか否かを判断する(ステップS208)。開発者は、メッセージは十分であると判断した場合、問題を解決するためにソースコード200を修正して(ステップS209)、ステップS202へと戻る。一方、開発者は、メッセージが不足していると判断した場合、埋め込み指示ファイル202を修正、追加して、記憶領域717に保存し(ステップS710)、ステップS202へと戻る。
ステップS206において、開発者は、問題が無いと判断した場合、この処理(作業)を終了する。
上述したステップS202における、開発者による実行指示に従って、ホストCPU11による変換プログラム220の実行中、IPマクロ212へのレジスタ操作APIが利用されるソースコード200からバイナリファイル710を作成するまでのフローを図6で説明する。
次に、第2実施例に係るデバッグシステムの構成例について説明する。図21は、第2実施例に係るデバッグシステムの構成例を示す図である。図21に例示されるデバッグシステム102の構成において、図1に例示されるデバッグシステム101との違いは、出力判定ルーチン230と、ヘッダファイル231と、変換プログラム220の代わりに変換プログラム240とを有する点であり、その他の構成は同様であるので、その説明を省略する。デバッグシステム102は、メッセージ出力制御装置に相当する。
出力判定ルーチン230は、メッセージの出力を判定するためのルーチンを予めコンパイラによりライブラリとしたものである。ヘッダファイル231は、ライブラリで定義されている出力判定ルーチン230のインタフェースを定義したヘッダファイルである。
変換プログラム240は、埋め込み指示ファイル202と、プログラムのソースコード200とを入力し、ソースコード200内のIPマクロへのアクセス部分を、出力判定ルーチン230とヘッダファイル231とで定義されたAPIに置き換える機能と、置き換えた結果をコンパイル及びリンクして実行形式のプログラムであるバイナリファイル210を作成するプログラムである。変換プログラム240がホストCPU11によって実行されて実現する処理部が、バイナリファイル210を作成する作成部に相当する。
変換プログラム240による、ホストCPU11によって実行可能な形式であるバイナリファイル210を作成する実行可能形式ファイルへの作成処理を図22で説明する。図22は、実行可能形式作成処理を説明するための図である。図22において、開発者が、IPマクロ212へのレジスタ操作APIと同じAPI形式でヘッダファイル231を作成する(ステップS221)。また、開発者が、埋め込み指示ファイル202の内容に応じて、出力判定ルーチン230を作成する(ステップS222)。
開発者は、コンパイル及びリンク時に指定するIPマクロ212へのレジスタ操作APIへのヘッダとライブラリのディレクトリを、作成した出力判定ルーチン230及びヘッダファイル231を格納したディレクトリに変更する(ステップS223)。
そして、開発者が、コンパイル及びリンクをホストCPU11に実施させ、バイナリファイル210を作成させる(ステップS224)。作成されたバイナリファイル210は、記憶領域222に格納される。
埋め込み指示ファイル202から出力判定ルーチン230を作成する際には、開発者の手作業で各機能判定や出力形式を埋め込むことは可能であるが、ツールなどにより、埋め込み指示ファイル202とIPマクロ212のメモリマップ情報などから自動的に作成することも可能である。
また、ステップS224による開発者の指示に応じて、バイナリファイル210を作成する作成処理は、図6及び図7、又は、図8及び図9の説明と同様であるので、詳細な説明を省略する。
上記第1又は第2実施例において、レジスタへの書き込みを条件としてタイマーによる時間測定を開始していたが、他の条件、例えば、レジスタの特定のフィールドがある値になったことを条件としても良い。
また、タイマーが使用できない環境では、実行形式中に一定のコード毎にカウンターをインクリメントする仕組みを付加することによっても実現可能である。
上述したような第1又は第2実施例を適用した場合には、不要なメッセージの出力を削減すると共に、図23に例示されるような、適用が無い場合の問題点を解消することができる。図23は、適用することによって解消可能な問題点の例を説明するための図である。図23において、第1又は第2実施例を適用しなかった場合には、メッセージ出力部分を含むドライバソースコードに相当する適用無コード22aに対して手作業でメッセージ出力部分の削除が行われる。
作業後適用無コード22a'は、メッセージ出力部分の削除が行われた状態を示す。手作業で削除が行われた場合、例えば、誤消去22bのように、誤って、本来必要なレジスタへのアクセスの記述がコメント文に設定されてしまい実行されない、といった問題がある。また、削除対象のメッセージ出力の記述の消去し忘れ22cなどの問題も発生する。
しかしながら、第1又は第2実施例を適用した場合には、開発者によるメッセージ出力部分の削除等の手作業が不要となるため、誤消去22b及び消去し忘れ22cなどを解消することができる。
上述したように、通信系のIPマクロのドライバソフトウェアのデバッグのために、ソフトウェアのデバッグ用のメッセージ出力を行うソフトウェアプログラムに対して、通信系IPマクロの機能を分類し、その機能分類に応じてIPマクロのレジスタを分類しておく。そして、ドライバソフトウェアのソースコード200を解析し、埋め込み指示ファイル202に基づいて、当該機能のレジスタの値を含むデバッグ用のメッセージを出力させるプログラムを埋め込む。この埋め込まれたプログラムでは、アクセス時間から一定時間の間に当該機能の全レジスタを一定間隔で出力、又は、同機能のレジスタへのアクセスの時に出力する。この際の時間管理はドライバソフトウェアが走行する環境に搭載されているタイマーハードウェアを用いればよい。
本発明は、具体的に開示された実施例に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
以上の第1及び第2実施例を含む実施形態に関し、更に以下の付記を開示する。
(付記1)
ソースコードと、メッセージ出力対象となるレジスタを指定した埋め込み指示ファイルとを記憶した記憶部と、
前記ソースコード内の、前記記憶部に記憶された前記埋め込み指示ファイルによって指定される前記レジスタへアクセスする記述を、出力期間の間、該レジスタの値を含むメッセージを出力装置に出力する記述を含む置き換え内容で置き換えて、該内容で置き換えられた該ソースコードから実行形式のバイナリファイルを前記記憶部に作成する作成部と
を有することを特徴とするコンピュータ装置。
(付記2)
前記埋め込み指示ファイルによって、機能毎に、前記出力期間を指定するメッセージ出力条件式と、レジスタ情報とが指定され、
前記置き換え内容は、メッセージ出力条件式によって指定されるタイマーに設定される前記出力期間と、対象のレジスタの指定情報を含むレジスタ情報によって指定されるメッセージ出力形式とを含むことを特徴とする付記1記載のコンピュータ装置。
(付記3)
前記作成部は、前記埋め込み指示ファイルに基づいて、機能毎に前記出力期間が設定される機能構造体と、該機能構造体から接続される前記レジスタ情報からレジスタ構造体とを含む埋め込み指示構造体を前記記憶部に作成することを特徴とする付記2記載のコンピュータ装置。
(付記4)
前記バイナリファイルを実行し、前記指定されたレジスタへのアクセス時に、該レジスタの値を含むメッセージの出力を開始し、該アクセス時に起動されたタイマーの設定値に前記出力期間を加算して設定することによって、該出力期間後、該メッセージの出力装置への出力を停止することを特徴とする付記2又は3のいずれか一項記載のコンピュータ装置。
(付記5)
前記ソースコードから読み出した記述が、前記記憶部に記憶された前記埋め込み指示ファイルによって指定される前記レジスタへアクセスする記述であるか否かを判定する判定ルーチンと、ライブラリで定義されている判定ルーチンのインタフェースを定義したヘッダファイルとを有することを特徴とする付記1乃至3のいずれか一項記載のコンピュータ装置。
(付記6)
前記ソースコードは、通信制御を行うマクロを記述したコードであることを特徴とする付記1乃至5のいずれか一項記載のコンピュータ装置。
(付記7)
コンピュータによって実行されるメッセージ出力制御方法であって、
記憶部に記憶されたソースコードと、メッセージ出力対象となるレジスタを指定した埋め込み指示ファイルとを入力し、
前記ソースコード内の、前記埋め込み指示ファイルによって指定される前記レジスタへアクセスする記述を、出力期間の間、該レジスタの値を含むメッセージを出力装置に出力する記述を含む置き換え内容で置き換え、
前記内容で置き換えられた前記ソースコードから実行形式のバイナリファイルを前記記憶部に作成する
ことを特徴とするメッセージ出力制御方法。
(付記8)
記憶部に記憶されたソースコードと、メッセージ出力対象となるレジスタを指定した埋め込み指示ファイルとを入力し、
前記ソースコード内の、前記埋め込み指示ファイルによって指定される前記レジスタへアクセスする記述を、出力期間の間、該レジスタの値を含むメッセージを出力装置に出力する記述を含む置き換え内容で置き換え、
前記内容で置き換えられた前記ソースコードから実行形式のバイナリファイルを前記記憶部に作成する
処理をコンピュータに実行させるプログラム。