(57)【要約】【課題】インサーキットエミュレータを利用するデバッグ方式の欠点を回避し、予め設定した条件でのプログラムトレースに機能を限定することにより、インサーキットエミュレータを使用せずに簡便にプログラムの実時間トレースが可能になる簡易デバッグ方式を提供する。【解決手段】ターゲット機器（５４）からデバッグ用データを出力する出力端子（５５）を備え、数行程度の簡単なプログラムの如きデバッグ用データ出力プログラムをターゲット機器（５４）に対する所望のプログラムに含ませて動作させることにより、出力端子（５４）からデバッグ用のデータが出力されるように構成されている。【選択図】      図１
2005292978.tif 000002
【特許請求の範囲】
【請求項１】
ターゲット機器からデバッグ用データを出力する出力端子を備え、
数行程度の簡単なプログラムの如きデバッグ用データ出力プログラムを前記ターゲット機器に対する所望のプログラムに含ませて動作させることにより、
前記出力端子からデバッグ用のデータが出力されるようにした
プログラム制御によって動作する機器の簡易デバッグ方式。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＭＰＵのプログラムによって制御される装置の開発時におけるデバッグや運用中の不具合症状の解析のために、プログラムを運用環境で動作させた状態でプログラム動作状態を外部より知ることができるデバッグ方式に関するものである。
【背景技術】
【０００２】
一般的にＭＰＵによって制御される装置の開発段階におけるデバッグは、インサーキットエミュレータやロジックアナライザなどの測定器類を接続して行うか、あるいは、キーボードやディスプレイを備えた装置でＯＳが稼動できる状態であればオンラインデバッガプログラムなどを用いるのが一般的である。
ハードウェアの多くも小型化や柔軟性のために集積化され、何らかのプロセッサによって制御されるようになっているものも極めて多い。
このように、ＭＰＵによって制御される装置は、ソフトウェアのみならずハードウェアの開発においてもソフトウェアデバッグのフェーズを避けることは出来ない。
【０００３】
インサーキットエミュレータ５０によるデバッグは、図８に示すように、プログラムの実行・停止が各種条件で可能であり、デバッグの自由度が高いため、非常に有効なデバッキングツールであるが、以下のような欠点がある。
（１）ＭＰＵの種類により個別の装置（エミュレーションポッド５１とエミュレーションプローブ５２）が必要である。また、１台で１台にしか接続できないので、多くの種類の装置開発を手がけると設備投資がかさむ。
（２）プログラム開発環境と整合のとれたデバッグ用の環境（エミュレータ５０からの情報とコンパイル／リンク時の情報とソースコードを複合情報として表示／操作する）をＰＣ５３上に整える必要があり、そのための費用がエミュレータ台数に応じてかかる。
（３）ＣＰＵのパッケージ形態（直接はんだ付けする場合など）によってはエミュレータを接続するために専用の基板を用意する必要があり、開発投資もかさむ。
（４）運用状態で不具合の解析などＣＰＵ基板５４を装置に実装した状態では、構造上エミュレータ接続が不可能であったり、あるいは非常に困難が伴う場合が多い。
（５）エミュレーションプローブ５２をターゲットＣＰＵ基板５４の如きデバッグのターゲット装置に接続することによって電源負荷やノイズの発生状態，負荷駆動条件などが変わるために、周辺回路が影響を受けて実行条件が変わってしまう場合がある。
（６）エミュレータ５０の仕様上、利用できるメモリ空間に制限があるためエミュレーションそのものに制約が発生することもある。
（７）一般的にデバッグ時には条件付きコンパイル等を行い、生成コードの最適化オプションも設定しない。これは最適化処理によりバイナリコードの最適化が行われると、コンパイラの途中出力であるソースコード表示のための情報と、コンパイラの最終出力であるバイナリコードとの整合が取れなくなることがあるためであるが、最終的な実行コードは処理速度向上のために最適化される場合も多く、最適化されたコードではインサーキットエミュレーションが困難になる場合がある。
【０００４】
このような従来技術の欠点を克服するために、システムＬＳＩ，マイクロコンピュータＭＵＰ，ディジタル信号処理装置ＤＳＰ等のデバッグを効率的に行うために、ＬＳＩ等に接続されたテスト端子より内部情報を出力する技術（特許文献１参照）、ＣＰＵに端子数を削減したテスト用入出力端子を接続する技術（特許文献２参照）が提案されている。
【特許文献１】特開２００１−１４２７３３号公報
【特許文献２】特開２０００−２０７３８０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、これらの従来技術では、内部情報をとり出すために、特別にテスト信号を入力するテスト端子を設けることが必要である。
【０００６】
本発明の目的は、インサーキットエミュレータを利用するデバッグ方式の上記のような欠点を回避し、予め設定した条件でのプログラムトレースに機能を限定することにより、インサーキットエミュレータを使用せずに簡便にプログラムの実時間トレースが可能になる簡易デバッグ方式を提供することにある。
【課題を解決するための手段】
【０００７】
この目的を達成するために、本発明による簡易デバッグ方式は、ターゲット機器からデバッグ用データを出力する出力端子を備え、
数行程度の簡単なプログラムの如きデバッグ用データ出力プログラムを前記ターゲット機器に対する所望のプログラムに含ませて動作させることにより、
前記出力端子からデバッグ用のデータが出力されるように構成されている。
【発明の効果】
【０００８】
本発明により、以下の効果が得られる。
ロジックアナライザないしは相当する機材のみを用いて簡易なプログラムトレースが可能となり、
（１）インサーキットエミュレータがない環境でも簡易的なソフトウェアデバッグや不具合の特定が可能になる。
（２）インサーキットエミュレータに依存する動作の制約や回路への影響を排除することができる。
（３）トレースのための情報を出力するソフト処理は極くわずかであり、ソースコード作成時点でこの処理を埋め込んでおけばソフトウェア上の負担もほとんどなく、最終的に削除しなくてもシステムに与える影響は全くないかあってもごくわずかである。したがってデバッグのためのリソースを殆ど消費しない。
（４）ＣＰＵの種類に依存する投資が不要。
（５）開発時のデバッグ環境規模に依存した投資を削減することができる。
【発明を実施するための最良の形態】
【０００９】
本発明の実施例を図１，図２，図３，図４，図５，図６，図７に示す。
図１は全体構成、図２，図４は本発明の実施例のハードウェア（並列と直列）、図３は本発明の実施例のハードウェア・並列・タイミングチャート、図５は本発明の実施例のハードウェア・直列・タイミングチャート、図６は本発明の実施例のソフトウェア（Ｃ言語の場合）、図７は本発明によるトレース状態出力のそれぞれ例である。
図１に示すように、本発明によるデバッグ環境の構成は非常に簡単であり、ターゲットＣＰＵ基板５４側ではプログラムの処理部分毎に予め割り振ったデータを外部に出力し、この出力をコネクタ及びプローブ５５を介して外部のロジックアナライザ５６ないしデジタル入力ポートを備えたＰＣ等にて記録するだけである。
並列データを入力して記録し、別途読み出しする手段があればロジックアナライザ５６やＰＣには限定されない。
【００１０】
図２，図３は本発明のハードウェア部分の実施例である。この実施例ではデータをｎビット（ｎは整数）の並列出力としているが、端子の都合で図４，図６のように直列出力としても構わない。
ただし直列出力の場合には、並列の場合よりも出力に時間がかかるため、出力データの変化する時間間隔が直列出力に要する時間よりも短い場合には利用できない。
【００１１】
＜並列出力の場合＞
図２において、出力状態が読み出し可能なｎビットレジスタの出力のポートＰＰＯＵＴは、ＣＰＵが生成する書き込み信号／ＷＲと読み出し信号／ＲＤ、及びアドレスバス信号などから生成されるデバイス選択信号／ＣＳによって制御される。ＰＰＯＵＴとＣＰＵとのデータ交換はデータバスを介して行われるものとする。これらの制御信号はＣＰＵアーキテクチャに依存するので、必ずしもこの構成でなくても良い。
ラッチクロックＬＣＫはＣＰＵクロックに同期した一定周波数のクロック信号を仮定する。一般にはＣＰＵクロックを分周してこのようなクロックを容易に得ることが可能である。
ＰＰＯＵＴは、ＣＳがロウレベルになることにより、書き込みまたは読み出し可能になるものとする。
ＰＰＯＵＴにデータを書き込む際には、ＣＳをロウとしておき、ＷＲの立ち上がりでデータバスからの入力を確定する。
ＰＰＯＵＴからデータを読み出す際には、ＣＳをロウとしておき、ＲＤをロウとすることでデータバスにデータを出力する。
【００１２】
図３はこれらのタイミングチャートの概念図を示す。制御信号の極性やタイミングなどの物理的な関係はＣＰＵのアーキテクチャに依存するため、図２，図３は概念を示している。
ＰＰＯＵＴの出力は外部機器で容易に読み取ることができる。ロジックアナライザを用いると、ＬＣＫを用いなくても予め設定したサンプリング間隔でＰＰＯＵＴの出力を記録することができる。
ロジックアナライザ以外の手段で出力データを保存するための便宜のために、ＬＣＫが用意される。例えば、ＬＣＫの立ち上がりで出力データをラッチすることができる。ＬＣＫは、また、時間の経過を外部に伝える役割も果たすことができる。例えば、外部機器でＬＣＫをカウンタのクロック入力に接続しておき、出力データの変化点でカウンタの値を記録することにより，プログラムの所定の範囲にどれだけ時間を要したかを容易に推定することができる。
【００１３】
＜直列出力の場合＞
図４に示すように、直列出力の場合にはＰＰＯＵＴ出力を入力とする並列−直列変換器ＳＰＣＮＶとｎビット直列出力制御部ＳＣＮＴによって並列データを直列に変換して外部に出力する。
図５はそのタイミングチャートである。ＣＰＵとＰＰＯＵＴの関係は、図２，図３と同じである。
ＰＰＯＵＴに書き込まれた並列データは、ＳＣＮＴ内において、ＷＲをＳＣＫを用いて遅延させて生成するラッチ信号／ＬＤによって、ＳＰＣＮＶにロードされる。
ＳＰＣＮＶにラッチされているデータは、直列出力用のクロックＳｃによってＳＰＣＮＶ内で順次シフトされつつＳｏとして出力される。
直列変換された信号Ｓｏを外部で受け取る便宜のために直列出力イネーブル信号／Ｓｅを用意し、／Ｓｅがロウレベルのときに直列出力データＳｏを外部で受け取れるようにする。
図２，図４に示すハードウェアは、汎用デバイスを用いて容易に構成することが可能であるため、ここでは詳細な説明はしない。
【００１４】
＜ソフトウェア＞
本発明においては、図２，図４などに示す簡単なハードウェアとともに、極く僅かなソフトウェア上の構成が必要である。
図６は７個の関数プログラムで本発明を説明する為のＣ言語のソースプログラムの一例であるが、本発明は言語仕様に依存しないので、他の言語で記述されていても同じ考え方を適用することができる。
図６において、“＃ｄｅｆｉｎｅ”で開始される行は、本発明において用いる、プログラムの実行部分を示す定数と、図２，図４においてＰＰＯＵＴとして示すポートのＩ／Ｏアドレスの定義である。
【００１５】
図４の例では、各関数プログラムに固有の数値としてMAIN LOOP，FUNC １，FUNC ２， SUBFUNC １， SUBFUNC ２， DEVDR １， DEVDR ２を定義している。また、ＰＰＯＵＴのアドレスとして TRACE ＩＯを定義している。なお、０×０００１とは、１６進数０００１を意味する。
また“ｅｘｔｅｒｎ”で開始される行は、外部参照関数宣言である。ここではＩ／Ｏアドレス空間に配置されたＩ／Ｏポート入出力の関数 import() とoutport() を宣言している。                                                                              
【００１６】
図６のプログラム構成は以下の通りである。
（１）関数main loop()：無限ループを構成していて、関数func １()と関数func   ２()を呼び出す。
（２）関数func １()：関数 subfunc １()を呼び出す。
（３）関数func ２()：関数 subfunc ２()を呼び出す。
（４）関数 subfunc １()：関数 devdr １()を呼び出す。
（５）関数 subfunc ２()：関数 devdr ２()を呼び出す。
（６）関数 devdr １()：特に何もしない。
（７）関数 devdr ２()：特に何もしない。
プログラム中の“／＊”と“＊／”で囲まれた部分はコメントである。
【００１７】
＜関数main loop()＞
処理Ｓｍ１，処理Ｓｍ２はこの関数の中で使うローカル変数の宣言である。
処理Ｓｍ１では符号なし整数として変数 trace out を、Ｓｍ２では符号付整数として変数ｆ１及びｆ２を宣言している。
処理Ｓｍ３は無限ループ構造を示し、ループ中で処理Ｓｍ４，Ｓｍ５，Ｓｍ６，Ｓｍ７，Ｓｍ８を繰り返し実行する。
処理Ｓｍ４はＰＰＯＵＴポートから現状の出力値を読み出し、 trace out に保存する。
処理Ｓｍ５はＰＰＯＵＴポートに関数main loop()の実行を示す定数MAIN LOOPを出力する。
処理Ｓｍ６は関数func １()、Ｓｍ７は関数func ２()を呼び出す。
処理Ｓｍ８は trace out に保存してあった以前のＰＰＯＵＴ出力状態を出力する。
【００１８】
＜関数func １()とfunc ２()＞
処理Ｓｆ１１、処理Ｓｆ１２、Ｓｆ２１、Ｓｆ２２、はこの関数の中で使うローカル変数の宣言である。
処理Ｓｆ１１，Ｓｆ２１では符号なし整数として変数 trace out を、Ｓｆ１２，Ｓｆ２２では符号整数として変数sbf を宣言している。
処理Ｓｆ１３，Ｓｆ２３はＰＰＯＵＴポートから現状の出力値を読み出し、 trace out に保存する。
処理Ｓｆ１４，Ｓｆ２４はＰＰＯＵＴポートに関数func １()ないしfunc ２()の実行を示す定数FUNC １またはFUNC ２を出力する。
処理Ｓｆ１５は関数 subfunc １()、Ｓｆ２５は関数 subfunc ２()を呼び出す。
処理Ｓｆ１６，Ｓｆ２６は trace out に保存してあったもの以前のＰＰＯＵＴ出力状態を出力する。
処理Ｓｆ１７，Ｓｆ２７は戻り値としてsbf の値を持ってこの関数を抜けることを表す。
【００１９】
＜関数 subfunc １()と subfunc ２()＞
処理Ｓｓｆ１１，処理Ｓｓｆ１２，Ｓｓｆ２１，Ｓｓｆ２２はこの関数の中で使うローカル変数の宣言である。
処理Ｓｓｆ１１，Ｓｓｆ２１では符号なし整数として変数 trace out を、処理Ｓｓｆ１２，Ｓｓｆ２２では符号付整数として変数 devdr stを宣言している。
処理Ｓｓｆ１３，Ｓｓｆ２３はＰＰＯＵＴポートから現状の出力値を読み出し、 trace out に保存する。
処理Ｓｓｆ１４，Ｓｓｆ２４はＰＰＯＵＴポートに関数 subfunc １()ないし subfunc ２()の実行を示す定数 SUBFUNC １または SUBFUNC ２を出力する。
処理Ｓｓｆ１５は関数 devdr １()、Ｓｓｆ２５は関数 devdr ２()を呼び出す。
処理Ｓｓｆ１６，Ｓｓｆ２６は trace out に保存してあったもの以前のＰＰＯＵＴ出力状態を出力する。
処理Ｓｓｆ１７，Ｓｓｆ２７は戻り値として devdr stの値を持ってこの関数を抜けることを表す。
【００２０】
＜関数 devdr １()と devdr ２()＞
処理Ｓｄ１１，処理Ｓｄ２１はこの関数の中で使うローカル変数の宣言である。
処理Ｓｄ１１，処理Ｓｄ２１では符号なし整数として変数 trace out を宣言している。
処理Ｓｄ１２，処理Ｓｄ２２はＰＰＯＵＴポートから現状の出力値を読み出し、 trace out に保存する。
処理Ｓｄ１３，処理Ｓｄ２３はＰＰＯＵＴポートに関数 devdr １()ないし devdr ２()の実行を示す定数 DEVDR １または DEVDR ２を出力する。
処理Ｓｄ１４，処理Ｓｄ２４は trace out に保存してあったもの以前のＰＰＯＵＴ出力状態を出力する。
処理Ｓｄ１５，処理Ｓｄ２５は戻り値として“１”ないし“２”の値を持ってこの関数を抜けることを表す。
【００２１】
図６のプログラムを実行すると、時間経過に伴い、図７に示すようなＰＰＯＵＴ出力が得られる。
図６のプログラムは動作を説明するために記述したもので、特に実効的な処理を何も含んでいない。実際には例えば処理Ｓｍ５とＳｍ８の間には何らかの処理が通常は記述される。
【００２２】
本発明においてソフトウェア上で必要なことは、トレースしたい処理の先頭でＰＰＯＵＴに個別データを出力することである。ソフトウェア処理は通常は図６のように入れ子構造になるので、トレースしたい処理を終えたところで以前の出力状態に戻してやる方がデバッグはしやすい。
一般的に、ＰＰＯＵＴのようなＩ／Ｏデバイス入出力の処理（図６では外部参照関数とした）は非常に短い処理であり、アセンブリ言語でも１行か２行で記述可能である。図６では関数呼出しで宣言しているが、コンパイラ処理でインラインアセンブリ言語のマイクロとして処理される事も多い。
アセンブリ言語で１行から２行の処理は、特殊な命令でなければ、全体の処理には全く影響を与えない場合が大半であり、割り込み処理中に記述しても多くの場合は問題がない。
一般的にデバッグ時には条件付コンパイル等を行い、デバッグの便宜のために生成コードの最適化オプションも設定しないが、本発明はそもそも簡易的なバッグ手段であることと、本来の処理に直接影響しない部分にコード生成されることが明らかであるため、最適化を行っても影響はない。
本発明ではプログラムの実行・停止を制御することはできず、トレースのみの機能しかないが、最小限のリソースで運用状態でも実時間トレースが可能である。
【産業上の利用可能性】
【００２３】
システムＬＳＩ，マイクロコンピュータＭＰＵ，ＤＰＳ等のプログラム制御によって動作するターゲット機器のデバッグを効率よく実施することができる。
【図面の簡単な説明】
【００２４】
【図１】本発明の実施例の全体構成を示すブロック図である。
【図２】並列構成回路を用いる本発明の実施例を示すブロック図である。
【図３】図２に示す本発明の実施例における動作を示すタイミングチャートである。
【図４】直列構成回路を用いる本発明の実施例を示すブロック図である。
【図５】図４に示す本発明の実施例における動作を示すタイミングチャートである。
【図６】本発明方式においてＣ言語のソフトウェアを用いる場合の具体例を示す図である。
【図７】本発明方式における出力データとプログラム実行状態の関係を示す図である。
【図８】インサーキットエミュレータによる従来のデバッグ方式を説明するためのブロック図である。
【符号の説明】
【００２５】
５０  エミュレータ本体
５１  エミュレーションポッド
５２  エミュレーションプローブ
５３  パソコン（ＰＣ）
５４  ターゲット（ＣＰＵ基板）
５５  コネクタ及びプローブ
５６  ロジックアナライザ（ＰＣなど）
【図１】
2005292978.tif 000003
【図２】
2005292978.tif 000004
【図３】
2005292978.tif 000005
【図４】
2005292978.tif 000006
【図５】
2005292978.tif 000007
【図６】
2005292978.tif 000008
【図７】
2005292978.tif 000009
【図８】
2005292978.tif 000010