(57)【要約】【目的】組み込み機器内の開発対象プログラムの動作を制御する一般的なリモートデバッガにおいて、組み込み機器内にデバッグ環境を持たない任意のリアルタイムＯＳを搭載しても、リアルタイムＯＳ上で動作する各タスクの状態等の情報を獲得することを可能にするリモートデバッグ装置を提供すること。【構成】リモートデバッグ装置に係り、開発ホストと接続されたリアルタイムＯＳ搭載のデバッグ対象機器内において、リモートデバッグのために組み込まれたモニタから、ステップ実行完了時、又はユーザ操作によるデバッグストップ時、又はプログラム実行中予め設定してあるブレイクポイントに到達したブレイク時に起動される例外処理ルーチンに、リアルタイムＯＳで管理している各タスク情報を開発ホストへ通知する機構をリモートデバッグ装置に付加する。【選択図】      図１
2004234497.tif 000002
【特許請求の範囲】
【請求項１】
リモートデバッグ装置に係り、開発ホストと接続されたリアルタイムＯＳ搭載のデバッグ対象機器内において、リモートデバッグのために組み込まれたモニタから、ステップ実行完了時、又はユーザ操作によるデバッグストップ時、又はプログラム実行中予め設定してあるブレイクポイントに到達したブレイク時に起動される例外処理ルーチンに、リアルタイムＯＳで管理している各タスク情報を開発ホストへ通知する機構を付加したことを特徴とするリモートデバッグ装置。
【請求項２】
開発ホスト上で通知された各タスク情報を表示する機構を具備することを特徴とする請求項１記載のリモートデバッグ装置。
【請求項３】
開発ホスト上で通知された各タスク情報を保存する機構を具備することを特徴とする請求項１記載のリモートデバッグ装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、組み込み機器を開発するために、組み込み機器内にモニタを搭載し、開発ホスト上でこのモニタと通信しながら、組み込み機器内の開発対象プログラムの動作を制御する一般的なリモートデバッガにおいて、組み込み機器内にデバッグ環境を持たない任意のリアルタイムＯＳを搭載しても、リアルタイムＯＳ上で動作する各タスクの状態等の情報を獲得することを可能にするリモートデバッグ装置に関するものである。
【０００２】
【従来の技術】
従来、一般的なリモートデバッガは、開発対象となる組み込み機器内にモニタを搭載し、開発ホスト上のデバッガがこのモニタと通信しながら、組み込み機器内のＲＡＭエリアに開発対象のプログラムをダウンロードし、開発ホスト上のデバッガからユーザ操作により、組み込み機器内のモニタを介し、ダウンロードされたプログラムの実行、停止、ステップ実行、ブレイクポイントの設定、ブレイクポイント到達による停止を実現することで、プログラムをデバッグしていた。
【０００３】
デバッグ効率を上げるため様々なデバッグ方法が提案されている。例えば、通常開発ホスト上のデバッガからのユーザ操作によるコマンド実行は、組み込み機器内にダウンロードされたプログラムが停止している状態の時のみ可能であった。デバッグの利便性を上げるために、プログラムを停止させずに、開発ホスト上のデバッガからのユーザ操作によるコマンド実行を可能にする方法が提案されている（特開平９−２５９００４号公報参照）。
【０００４】
又、組み込み機器内にマルチタスクＯＳ（リアルタイムＯＳ）を搭載した環境において、タスク間でやり取りされるデータの内容やタイミングを確認できる方法も提案されている（特開平５−２０４６６４号公報参照）。
【０００５】
【発明が解決しようとする課題】
しかしながら、上記の方法では、以下のような問題点があった。
【０００６】
ａ）プログラムを停止させずに、開発ホスト上のデバッガからのユーザ操作によるコマンド実行を可能にする方法（特開平９−２５９００４号）では、リアルタイムＯＳを搭載したマルチタスク環境のデバッグが考慮されていない。
【０００７】
ｂ）組み込み機器内にマルチタスクＯＳ（リアルタイムＯＳ）を搭載した環境において、タスク間でやり取りされるデータの内容やタイミングを確認できる方法（特開平５−２０４６６４号）では、既存のリモートデバッガ（開発ホスト上のデバッガ＋組み込み機器内に搭載されたモニタ）を使用して上記リアルタイムＯＳに対応したデバッグ機能を実現することが考慮されていない。
【０００８】
本発明の目的は、組み込み機器を開発するために組み込み機器内にモニタを搭載し、開発ホスト上でこのモニタと通信しながら、組み込み機器内の開発対象プログラムの動作を制御する一般的なリモートデバッガにおいて、組み込み機器内にデバッグ環境を持たない任意のリアルタイムＯＳを搭載しても、リアルタイムＯＳ上で動作する各タスクの状態等の情報を獲得することを可能にするリモートデバッグ装置を提供することである。
【０００９】
【課題を解決するための手段】
上記目的を達成するため、本発明は、リモートデバッグ装置に係り、開発ホストと接続されたリアルタイムＯＳ搭載のデバッグ対象機器内において、リモートデバッグのために組み込まれたモニタから、ステップ実行完了時、又はユーザ操作によるデバッグストップ時、又はプログラム実行中予め設定してあるブレイクポイントに到達したブレイク時に起動される例外処理ルーチンに、リアルタイムＯＳで管理している各タスク情報を開発ホストへ通知する機構をリモートデバッグ装置に付加したことを特徴とする。
【００１０】
【発明の実施の形態】
以下に本発明の実施の形態を添付図面に基づいて説明する。
【００１１】
＜実施の形態１＞
本発明の実施の形態１では、請求項１及び２に対応して、課題ａ及び課題ｂを解決するための手段の実現方法について説明する。
【００１２】
図１において、ＲＯＭ２２０には、モニタ４１０及びリモートデバッグ装置４３０が存在している。ＣＰＵ２１０にリセットが掛かると、モニタ４１０が起動され、通信デバイス２２０を介して開発ホストマシン６００のデバッガ６１０とデバッグのための通信の初期化が行われる。デバッガ６１０に対するユーザ操作（ダウンロードボタン６７０のマウス６９０によるクリック）により、ＲＡＭ３００にリアルタイムＯＳ３５０及びタスク１（３１０）及びタスク２（３２０）及びタスク３（３３０）及びタスク４（３４０）のプログラムコードが、開発ホストマシン６００のハードディスク６８０からダウンロードされる。
【００１３】
ダウンロード後、デバッガ６１０に対するユーザ操作で、実行ボタン６４０をマウス６９０によってクリックすると、リアルタイムＯＳ３５０の初期化が開始され、リアルタイムＯＳタスク情報３６０を初期化し、タスク１（３１０）及びタスク２（３２０）及びタスク３（３３０）及びタスク４（３４０）が実行される。
【００１４】
デバッガ６１０に対するユーザ操作で、実行ボタン６４０をマウス６９０によってクリックした後、ストップボタン６６０をマウス６９０によってクリックすると、モニタ４１０からデバッグストップ例外処理機構４５０が起動され、ストップされた時点のソースコード及び行番号（６２１  ）をデバッグソースコードウィンドウ６２０に表示する。更に、デバッグストップ例外処理機構４５０は、タスク情報通知機構４７０をコールし、リアルタイムＯＳタスク情報３６０を読み取り、デバッグコンソール出力機構４２０に出力を依頼する。デバッグコンソール出力機構４２０は、デバッグコンソールウィンドウ６３０にリアルタイムＯＳタスク情報を表示する。
【００１５】
デバッガに対するユーザ操作で、ステップ実行ボタン６５０をマウス６９０によってクリックすると、モニタ４１０からステップ実行完了例外処理機構４４０が起動され、ステップ実行が完了された時点のソースコード及び行番号（６２１  ）をデバッグソースコードウィンドウ６２０に表示する。更に、ステップ実行完了例外処理機構４４０は、タスク情報通知機構４７０をコールし、リアルタイムＯＳタスク情報３６０を読み取り、デバッグコンソール出力機構４２０に出力を依頼する。デバッグコンソール出力機構４２０は、デバッグコンソールウィンドウ６３０にリアルタイムＯＳタスク情報を表示する。
【００１６】
デバッグソースコードウィンドウ６２０に表示されているソースコードの行番号（６２１  ）をマウス６９０によってクリックすると、その行にブレイクポイントが設定される。その後、デバッガ６１０に対するユーザ操作で、実行ボタン６４０をマウス６９０によってクリックした後、指定されたブレイクポイントに到達すると、モニタ４１０からブレイクポイント到達例外処理機構４６０が起動され、ブレイクポイントが設定された前後のソースコード及び行番号（６２１  ）をデバッグソースコードウィンドウ６２０に表示する。
【００１７】
更に、ブレイクポイント到達例外処理機構４６０は、タスク情報通知機構４７０をコールし、リアルタイムＯＳタスク情報３６０を読み取り、デバッグコンソール出力機構４２０に出力を依頼する。デバッグコンソール出力機構４２０は、デバッグコンソールウィンドウ６３０にリアルタイムＯＳタスク情報を表示する。
【００１８】
以上の結果、リアルタイムＯＳ３６０を搭載したマルチタスク環境のデバッグが可能となる（課題ａの解決）。又、既存のリモートデバッガ（開発ホスト上のデバッガ６１０＋組み込み機器内に搭載されたモニタ４２０）を使用してリアルタイムＯＳ３６０に対応したデバッグ機能を実現することが可能となる（課題ｂの解決）。
【００１９】
以下、本発明の実施の形態１を図面に基づいて詳細に説明する。
【００２０】
図２は図１中のリアルタイムＯＳタスク情報３６０を示す図である。リアルタイムＯＳタスク情報３６０は、リアルタイムＯＳ３５０の初期化時に初期化される。以降、リアルタイムＯＳ３５０は、リアルタイムＯＳタスク情報３６０を参照し、タスク１（３１０）及びタスク２（３２０）及びタスク３（３３０）及びタスク４（３４０）をマルチタスクで実行するためのスケジューリングに使用する。
【００２１】
リアルタイムＯＳタスク情報３６０は、先頭ＴＣＢ  ポインタ３６１から情報を辿れるリスト構造になっている。ＴＣＢ［０］３６２  に含まれる次のＴＣＢ  へのポインタ３７２をＴＣＢ［１］３７３と辿って行くと、システム上に存在する全タスクの情報を参照できる。終端では、次のＴＣＢ  へのポインタ３６１がＮＵＬＬ３７４を指し示す。
【００２２】
各タスクのＴＣＢ  （タスクコントロールブロック）内には、以下の情報が含まれている。タスクＩＤ（ＴＩＤ  ）３６３は、タスクの識別子である。タスク状態（ＳＴＡＴ）３６４は、タスクの状態を示す。タスクの状態遷移は図３で示す。
【００２３】
タスク状態（ＳＴＡＴ）３６４には、強制中断（０ｘ０１）、セマフォ待ち（０ｘ０２）、イベント待ち（０ｘ０４）、メッセージ待ち（０ｘ０８）、時間待ち又はタイムアウト待ち（０ｘ１０）、実行待（０ｘ２０）３８２の状態がある。タイマ待ち時間（ＤＴＩＭＥ  ）３６５は、時間待ち又はタイムアウト待ちのタスクの待ち時間を示す。タスク優先順位（ＰＲＩ  ）３６６は、タスクの実行優先順位を示す。実行待３８２状態のタスクが複数ある時、タスク優先順位３６６の高い（本実施の形態では値の大きい）タスクがＣＰＵ２１０を占有し実行３８３状態に遷移する。
【００２４】
タスクプログラムカウンタ値（ＰＣ）３６７は、該当タスクが実行状態３８３から中断状態３８４に遷移した際に、ＣＰＵ２１０のＰＣレジスタの値を退避したものである。タスクプログラムカウンタ値（ＰＣ）３６７は、次に実行状態３８３に遷移する際にＣＰＵ２１０のＰＣレジスタに復帰され、該当タスクの実行が再開される。タスクスタックポインタ値（ＳＰ）３６８は、該当タスクが実行状態３８３から中断状態３８４に遷移した際に、ＣＰＵ２１０のＳＰレジスタの値を退避したものである。タスクスタックポインタ値（ＳＰ）３６８は、次に実行状態３８３に遷移する際にＣＰＵ２１０のＳＰレジスタに復帰され、該当タスクの実行が再開される。
【００２５】
待ち行列の前方ＴＣＢ  ポインタ（ＴＯ＿ＯＬＤ）３６９は、該当タスクが中断状態３８４に遷移し、強制中断（０ｘ０１）、セマフォ待ち（０ｘ０２）、イベント待ち（０ｘ０４）、メッセージ待ち（０ｘ０８）、時間待ち又はタイムアウト待ち（０ｘ１０）の何れかの待ち行列に該当ＴＣＢ  が加わっている際、該当ＴＣＢ  より以前にその待ち行列に繋がれたタスクが存在すれば、そのＴＣＢ  へのポインタを示す。待ち行列の後方ＴＣＢポインタ（ＴＯ＿ＮＥＷ）３７０は、該当タスクが中断状態３８４に遷移し、強制中断（０ｘ０１）、セマフォ待ち（０ｘ０２）、イベント待ち（０ｘ０４）、メッセージ待ち（０ｘ０８）、時間待ち又はタイムアウト待ち（０ｘ１０）の何れかの待ち行列に該当ＴＣＢ  が加わっている際、該当ＴＣＢ  より以降にその待ち行列に繋がれたタスクが存在すれば、そのＴＣＢ  へのポインタを示す。待ち管理ブロック（ＣＢ＿ＰＴＲ）３７１は、強制中断（０ｘ０１）、セマフォ待ち（０ｘ０２）、イベント待ち（０ｘ０４）、メッセージ待ち（０ｘ０８）の各待ち行列を管理するブロックのアドレスを示す。
【００２６】
図３はタスクの状態遷移を示す図である。
【００２７】
タスクは、初期状態３８０、実行待状態（ＲＥＡＤＹ）  ３８２、実行状態（ＥＸＥＣＵＴＥ）  ３８３、中断状態（ＳＵＳＰＥＮＤ）  ３８４の状態を取り得る。それぞれの間の遷移は、初期化処理３８１、中断処理３８５又は３８７、中断解除処理３８６の起動によって発生する。タスクの状態は各タスク毎にタスク状態（ＳＴＡＴ）３６４に保持される。但し、実行状態（ＥＸＥＣＵＴＥ）  ３８３という状態は保持されず、実行待（０ｘ２０）３８２状態のタスクが複数ある場合、その中でタスク優先順位（ＰＲＩ  ）３６６が最高のタスクが実行状態（ＥＸＥＣＵＴＥ）  ３８３を表す。
【００２８】
初期状態３８０は、リアルタイムＯＳタスク情報３６０が初期化された直後の立ち上がり時の状態である。
【００２９】
実行状態（ＥＸＥＣＵＴＥ）  ３８３は、タスクがＣＰＵ２１０を占有し実行している状態でタスク優先順位（ＰＲＩ  ）３６６が最高で最も早く実行待状態（ＲＥＡＤＹ）  ３８２に遷移している１タスクのみがなり得る。
【００３０】
実行待状態（ＲＥＡＤＹ）  ３８２は、実行可能であるが優先順位等の関係で他のタスクがＣＰＵを占有しているためこれが空くのを待っている状態である。
【００３１】
中断状態（ＳＵＳＰＥＮＤ）  ３８４は、他のタスクやＩ／Ｏ２４０等からのイベント待ちの状態で、この状態の間はＣＰＵが空いても実行されることはない。中断状態（ＳＵＳＰＥＮＤ）  ３８４の要因は、タスク状態（ＳＴＡＴ）３６４に保持され、強制中断（０ｘ０１）、セマフォ待ち（０ｘ０２）、イベント待ち（０ｘ０４）、メッセージ待ち（０ｘ０８）、時間待ち又はタイムアウト待ち（０ｘ１０）の種類がある。
【００３２】
図４はタスク情報通知機構４７０を示す流れ図である。
【００３３】
最初に、デバッグコンソール出力機構４２０を起動し、図５に示す項目６３１を出力する（ステップ４７１）。項目６３１は、リアルタイムＯＳタスク情報３６０に含まれる情報に対応する。デバッグコンソール出力機構は４２０、一般的なリモートデバッガがサポートしている組み込み機器（ターゲット）側からの標準出力を開発ホスト側の標準出力ウィンドウに出力する機構である（シミュレーテッドＩ／Ｏとも言う）。デバッグコンソール出力機構は４２０、通信デバイス２２０を介し、出力要求を開発ホストマシン６００上のデバッガ６１０が解釈できるコマンド形式に含めるように変換する。デバッガ６１０は、受け付けたコマンド形式を解釈し、コマンドに含まれる出力要求内容をデバッガ６００上のデバッグコンソールウィンドウ６３０にそのまま出力する。
【００３４】
次に、変数ＴＣＢ  に先頭ＴＣＢ  ポインタ３６１を代入する（ステップ４７２）。次に、変数ＴＣＢ  がＮＵＬＬであるか判断する（ステップ４７３）。変数ＴＣＢ  がＮＵＬＬと等しかった場合、処理を終了する。変数ＴＣＢ  がＮＵＬＬと等しくなかった場合、変数ＴＣＢ  がＮＵＬＬになるまで、以下の処理を繰り返す（ステップ４７２）。
【００３５】
デバッグコンソール出力機構４２０を起動し、変数ＴＣＢ  及びタブを出力する（ステップ４７５）。次に、デバッグコンソール出力機構４２０を起動し、変数ＴＣＢ−＞  タスクＩＤ３６３  及びタブを出力する（ステップ４７６）。次に、デバッグコンソール出力機構４２０を起動し、変数ＴＣＢ−＞  タスク状態３６４及びタブを出力する（ステップ４７７）。次に、デバッグコンソール出力機構４２０を起動し、変数ＴＣＢ−＞  タイマ待ち時間３６５及びタブを出力する（ステップ４７８）。
【００３６】
次に、デバッグコンソール出力機構４２０を起動し、変数ＴＣＢ−＞  タスク優先順位３６６及びタブを出力する（ステップ４７９）。次に、デバッグコンソール出力機構４２０を起動し、変数ＴＣＢ−＞  タスクプログラムカウンタ値３６７及びタブを出力する（ステップ４８０）。次に、デバッグコンソール出力機構４２０を起動し、変数ＴＣＢ−＞  タスクスタックポインタ値及びタブを出力する（ステップ４８１）。
【００３７】
次に、デバッグコンソール出力機構４２０を起動し、変数ＴＣＢ−＞  待ち行列の前方ＴＣＢ  ポインタ３６９及びタブを出力する（ステップ４８２）。次に、デバッグコンソール出力機構４２０を起動し、変数ＴＣＢ−＞  待ち行列の後方ＴＣＢ  ポインタ３７０及びタブを出力する（ステップ４８３）。次に、デバッグコンソール出力機構４２０を起動し、変数ＴＣＢ−＞  待ち管理ブロック３７１及びタブを出力する（ステップ４８４）。最後に、変数ＴＣＢ  に変数ＴＣＢ−＞  次のＴＣＢ  へのポインタ３７２を代入する（ステップ４８５）。
【００３８】
図５はデバッグコンソールウィンドウ６３０を示す図である。
【００３９】
例えば、最初の行は、ＴＣＢ＿ＡＤＤＲが２０１２０  、ＴＩＤ  が１、ＳＴＡＴが０ｘ２０なので実行待状態を表し、ＤＴＩＭＥ  が０、ＰＲＩ  が０なのでタスク優先順位は最低を表し、ＰＣが３１ＤＡ、ＳＰが２１３６４  、ＴＯ＿ＯＬＤ及びＴＯ＿ＮＥＷが０  、ＣＢ＿ＰＴＲが０というようにタスクの情報を読み取ることができる。ＳＴＡＴが０ｘ２０のタスクが他に存在しないので、このタスクはＣＰＵ２１０を占有し実行状態３８３であることが分かる。
【００４０】
又、５行目は、ＴＣＢ＿ＡＤＤＲが２０３２０  、ＴＩＤ  が５、ＳＴＡＴが０ｘ０８なのでメッセージ待ちの中断状態３８４を表し、ＤＴＩＭＥ  が０、ＰＲＩ  が３なので０よりは高いタスク優先順位を表し、ＰＣが２５２２、ＳＰが２３３８Ａ  である。更に、ＴＯ＿ＯＬＤが２０２Ａ０  、Ｔ＿ＮＥＷ  が２０３Ａ０  、ＣＢ＿ＰＴＲが２０７Ｃ０  なのでメッセージ待ちの管理ブロックを表す。ＴＩＤ  が４のタスクとＴＩＤ  が６のタスクも同様にＣＢ＿ＰＴＲが２０７Ｃ０  なので同じメッセージ待ちの管理ブロックを使用していることになり、同じメッセージを待っていることを表す。待ち順は、ＴＯ＿ＯＬＤとＴＯ＿ＮＥＷを参照することにより、ＴＩＤ４−ＴＩＤ５−ＴＩＤ６であることが分かる。
【００４１】
＜実施の形態２＞
本発明の実施の形態２では、請求項３に対応した実現方法について説明する。
【００４２】
実施の形態２では、実施の形態１の方法を用いて、タスク情報通知機構４７０からの通知をデバッグコンソール出力機構４２０を介し、デバッグコンソールウィンドウ６３０に表示した後、デバッガ６１０の機能を使用し、デバッグコンソールウィンドウ６３０に表示された各タスクの情報をハードディスク６８０にファイルとして保存する。デバッガ６１０に保存機能がない場合は、通常、開発ホストマシン上に搭載されているＯＳ（ウィンドウシステム）の機能を使用し、デバッグコンソールウィンドウ６３０の内容のスクリーンダンプ等を取ってハードディスク６８０に保存することが可能である。
【００４３】
以上の機構を設けることで、デバッグ時のログが残り、より効率的なマルチタスクデバッグが可能となる。
【００４４】
【発明の効果】
以上の説明で明らかなように、本発明によれば、リアルタイムＯＳを搭載したマルチタスク環境のデバッグが可能となる。これにより、マルチタスクプログラムのデバッグの効率を向上させ製品開発期間が短縮される。
【００４５】
又、既存のリモートデバッガ（開発ホスト上のデバッガ＋組み込み機器内に搭載されたモニタ）を使用してリアルタイムＯＳに対応したデバッグ機能を実現することが可能となる。これにより、本発明を実装するために、専用のハードウェアを新規に開発する必要はなく、既存のリモートデバッッガにおける組み込み機器内のモニタに簡単に組込むことが可能であるので、既存システムであっても低コストで開発効率を向上させることができる。
【図面の簡単な説明】
【図１】本発明の実施の形態１を示す構成図である。
【図２】図１中のリアルタイムＯＳタスク情報を示す図である。
【図３】図２中のタスク状態の状態遷移を示す図である。
【図４】図１中のタスク情報通知機構を示す図である。
【図５】図１中のデバッグコンソールウィンドウの外観を示す図である。
【符号の説明】
１００    組込機器
２００    ＣＰＵバス
２１０    ＣＰＵ
２２０    通信デバイス
３００    ＲＡＭ
３１０    タスク１
３２０    タスク２
３３０    タスク３
３４０    タスク４
３５０    リアルタイムＯＳ
３６０    リアルタイムＯＳタスク情報
４００    ＲＯＭ
４１０    モニタ
４２０    デバッグコンソール出力機構
４３０    リモートデバッグ装置
４４０    ステップ実行完了例外処理機構
４５０    デバッグストップ例外処理機構
４６０    ブレイクポイント到達例外処理機構
４７０    タスク情報通知機構
５００    ＲＳ２３２Ｃ又はイーサネット等
６００    開発ホストマシン
６１０    デバッガ
６２０    デバッグソースコードウィンドウ
６２１    行番号
６３０    デバッグコンソールウィンドウ
６４０    デバッグ実行ボタン
６５０    ステップ実行ボタン
６６０    デバッグストップボタン
６７０    ダウンロードボタン
６８０    ハードディスク
６６０    マウス
【図１】
2004234497.tif 000003
【図２】
2004234497.tif 000004
【図３】
2004234497.tif 000005
【図４】
2004234497.tif 000006
【図５】
2004234497.tif 000007