(57)【特許請求の範囲】
【請求項１】
オンチップデバッグ機能を有するマイクロコンピュータであって、
命令の実行処理を行う中央処理ユニットと、
マイクロコンピュータの外部に設けられるデバッグツールとの間でデータを送受信し、デバッグツールからの受信データに基づいて、デバッグ処理を行うと共に、所与のメモリの制御プログラムが格納されるルーチンアドレスへのジャンプコマンドである外部ルーチンジャンプコマンドを実行するための処理を行う第１のモニタ手段とを含み、
前記メモリ制御プログラムは、前記メモリの書き込みプログラムを含み、
前記受信データは、前記書き込みプログラムが格納されるルーチンアドレスと、前記メモリへのライトデータと、前記ライトデータを書き込むデータアドレスとを含み、
前記第１のモニタ手段は、
前記デバッグツールからの前記受信データが含む識別データが、前記外部ルーチンジャンプコマンド以外のコマンドを指示するデータであった場合には、そのコマンドの処理を実行し、
前記デバッグツールからの前記受信データが含む識別データが、前記外部ルーチンジャンプコマンドを指示するデータであった場合には、前記受信データに含まれる前記ルーチンアドレス、前記ライトデータ及び前記データアドレスと、戻りアドレスとをマイクロコンピュータの内部レジスタに書き込み、書き込み後に前記書き込みプログラムの前記ルーチンアドレスにジャンプし、前記書き込みプログラムの処理の終了後に前記戻りアドレスにジャンプして、デバッグプログラムの処理に戻ることを特徴とするマイクロコンピュータ。
【請求項２】
請求項１において、
前記メモリが、電気的にデータの消去・書き込みが可能な不揮発性メモリであり、
前記メモリ制御プログラムが、前記不揮発性メモリの初期化プログラム及び書き込みプログラムであることを特徴とするマイクロコンピュータ。
【請求項３】
請求項１又は２において、
前記第１のモニタ手段から前記デバッグツールへ送信されるデータが、前記所与のメモリへのデータの書き込みエラーを知らせるフラグを含むことを特徴とするマイクロコンピュータ。
【請求項４】
請求項１乃至３のいずれかにおいて、
前記デバッグツールが、
デバッグコマンドを少なくとも１つのプリミティブコマンドに変換するための処理を行う第２のモニタ手段を含み、
前記第１のモニタ手段が、
実行するプリミティブコマンドを前記第２のモニタ手段からの受信データに基づいて決定し、決定したプリミティブコマンドを実行するための処理を行うことを特徴とするマイクロコンピュータ。
【請求項５】
請求項４において、
前記プリミティブコマンドが、
前記外部ルーチンジャンプコマンド、ユーザプログラムの実行を開始するコマンド、デバッグモード時におけるメモリマップ上のアドレスにデータをライトするコマンド、及び前記メモリマップ上のアドレスからデータをリードするコマンドを含むことを特徴とするマイクロコンピュータ。
【請求項６】
請求項１乃至５のいずれかのマイクロコンピュータと、
前記マイクロコンピュータの処理対象となるデータの入力源と、
前記マイクロコンピュータにより処理されたデータを出力するための出力装置とを含むことを特徴とする電子機器。
【請求項７】
マイクロコンピュータを含むターゲットシステムのためのデバッグシステムであって、
マイクロコンピュータの外部に設けられるデバッグツールと、
前記デバッグツールとの間でデータを送受信し、デバッグツールからの受信データに基づいて、デバッグ処理を行うと共に、所与のメモリの制御プログラムが格納されるルーチンアドレスへのジャンプコマンドである外部ルーチンジャンプコマンドを実行するための処理を行う第１のモニタ手段とを含み、
前記メモリ制御プログラムは、前記メモリの書き込みプログラムを含み、
前記受信データは、前記書き込みプログラムが格納されるルーチンアドレスと、前記メモリへのライトデータと、前記ライトデータを書き込むデータアドレスとを含み、
前記第１のモニタ手段は、
前記デバッグツールからの前記受信データが含む識別データが、前記外部ルーチンジャンプコマンド以外のコマンドを指示するデータであった場合には、そのコマンドの処理を実行し、
前記デバッグツールからの前記受信データが含む識別データが、前記外部ルーチンジャンプコマンドを指示するデータであった場合には、前記受信データに含まれる前記ルーチンアドレス、前記ライトデータ及び前記データアドレスと、戻りアドレスとをマイクロコンピュータの内部レジスタに書き込み、書き込み後に前記書き込みプログラムの前記ルーチンアドレスにジャンプし、前記書き込みプログラムの処理の終了後に前記戻りアドレスにジャンプして、デバッグプログラムの処理に戻ることを特徴とするデバッグシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マイクロコンピュータ、マイクロコンピュータを含む電子機器、及びデバッグシステムに関する。
【０００２】
【背景技術及び発明が解決しようとする課題】
近年、ゲーム装置、カーナビゲーションシステム、プリンタ、携帯情報端末などの電子機器に組み込まれ、高度な情報処理を実現できるマイクロコンピュータに対する需要が高まっている。そして、このような組み込み型のマイクロコンピュータは、通常、ターゲットシステムと呼ばれるユーザボードに実装される。そして、ターゲットシステムを設計するユーザは、このターゲットシステムを動作させるソフトウェアを、例えばＩＣＥ（In-Circuit Emulator）と呼ばれるソフトウェア開発支援ツールを用いてデバッグする。
【０００３】
さて、このようなデバッグ作業において、ユーザは、ＩＣＥを用いてプログラムのバグを見つけ出す。そしてフラッシュメモリ（ＥＥＰＲＯＭ）などのメモリに格納されているプログラムを、デバッグされたプログラムに書き換える。このため、プログラムのバグがなくなるまでユーザは、フラッシュメモリに格納されているプログラムを何度も書き換える作業を行うことになる。
【０００４】
この場合のフラッシュメモリのプログラム書き換え作業は例えば以下のようにして行う。
【０００５】
即ち第１の手法では、フラッシュメモリをターゲットシステムから取り外し、デバッグしたプログラムをＲＯＭライタを用いてこのフラッシュメモリに書き込む。その後、このフラッシュメモリをターゲットシステムに再度実装する。
【０００６】
また第２の手法では、図１５に示すように、ＲＯＭライタ４１２を接続するための端子４０６を、マイクロコンピュータ４０４が実装されるターゲットシステム４００に設ける。そして、この端子４０６にＲＯＭライタ４１２を接続し、フラッシュメモリ４０２をターゲットシステム４００に実装した状態で、フラッシュメモリ４０２に格納されるプログラムを書き換える。
【０００７】
しかしながら、上記第１の手法には、プログラムの書き換え作業に要する時間（ターンアラウンドタイム）が非常に長くなり、デバッグ作業が極端に非効率化するという問題点がある。
【０００８】
一方、上記第２の手法には、デバッグツール４０８及びホストシステム４１０から成るプログラムデバッグシステムと、ＲＯＭライタ４１２及びホストシステム４１４から成るプログラム書き換えシステムとを統合できないという問題点がある。即ち、この第２の手法では、プログラムのデバッグ作業はホストシステム４１０上で行い、フラッシュメモリのプログラムの書き換え作業はホストシステム４１４上で行うことになる。したがって、プログラムのデバッグ作業と、プログラムの書き換え作業とを、１台のホストシステム上で進めることができない。このため、やはり、デバッグ作業が非効率化する。
【０００９】
本発明は、以上のような技術的課題に鑑みてなされたものであり、その目的とするところは、デバッグ作業の効率化を図ることができるマイクロコンピュータ、これを含む電子機器、及びデバッグシステムを提供することにある。
【００１０】
【課題を解決するための手段】
上記課題を解決するために本発明は、オンチップデバッグ機能を有するマイクロコンピュータであって、命令の実行処理を行う中央処理ユニットと、マイクロコンピュータの外部に設けられるデバッグツールとの間でデータを送受信し、デバッグツールからの受信データに基づいて、デバッグ処理を行うと共に所与のメモリの制御プログラムが格納されるアドレスへのジャンプコマンドを実行するための処理を行う第１のモニタ手段とを含むことを特徴とする。
【００１１】
本発明によれば、第１のモニタ手段が、デバッグツールからデータを受信し、この受信データに基づいて、メモリ制御プログラムのアドレスへのジャンプコマンドを実行する。これにより、第１のモニタ手段の処理を行うモニタプログラムからメモリ制御プログラムへと処理が移行し、メモリ制御プログラムにより、例えばメモリへのプログラムの書き込み処理等が行われる。また、第１のモニタ手段は、プログラムのデバッグのための種々の処理も行う。したがって本発明によれば、第１のモニタ手段により、メモリへのプログラムの書き込み処理等と、プログラムのデバッグ処理の両方を行うことが可能になる。これにより、プログラムのデバッグ作業の効率化を図れ、プログラムの開発期間の短縮化を図れるようになる。
【００１２】
また本発明は、前記所与のメモリが、電気的にデータの消去・書き込みが可能な不揮発性メモリであり、前記メモリ制御プログラムが、前記不揮発性メモリの初期化プログラム及び書き込みプログラムであることを特徴とする。このようにすることで、不揮発性メモリの消去動作や書き込み動作を簡易に実現できるようになる。
【００１３】
また本発明は、前記受信データが、前記メモリ制御プログラムが格納されるルーチンアドレス、前記所与のメモリへのライトデータ、及びライトデータを書き込むデータアドレスを含むことを特徴とする。このようにすることで、メモリ制御プログラムのアドレスへジャンプした後に、そのメモリにライトデータを書き込むことが可能になる。
【００１４】
また本発明は、前記第１のモニタ手段から前記デバッグツールへ送信されるデータが、前記所与のメモリへのデータの書き込みエラーを知らせるフラグを含むことを特徴とする。このようにすることで、メモリへのデータの書き込みエラーが生じた場合に、それをデバッグツールに知らせることが可能になる。
【００１５】
また本発明は、前記デバッグツールが、デバッグコマンドを少なくとも１つのプリミティブコマンドに変換するための処理を行う第２のモニタ手段を含み、前記第１のモニタ手段が、実行するプリミティブコマンドを前記第２のモニタ手段からの受信データに基づいて決定し、決定したプリミティブコマンドを実行するための処理を行うことを特徴とする。このようにすれば、第１のモニタ手段の処理を実行するためのモニタプログラムに、各デバッグコマンドを実行するための複雑なルーチンを持たせる必要がなくなる。したがって、モニタプログラムの命令コードサイズを格段に小さくできるようになり、小さなハードウェア規模でオンチップデバッグ機能を実現できるようになる。
【００１６】
また本発明は、前記プリミティブコマンドが、前記メモリ制御プログラムが格納されるアドレスへのジャンプコマンド、ユーザプログラムの実行を開始するコマンド、デバッグモード時におけるメモリマップ上のアドレスにデータをライトするコマンド、及び前記メモリマップ上のアドレスからデータをリードするコマンドを含むことを特徴とする。このようにプリミティブコマンドをシンプルにすることで、モニタプログラムの命令コードサイズを更に小さくできるようになる。
【００１７】
また本発明は、前記第２のモニタ手段からの受信データが、前記第１のモニタ手段が実行するプリミティブコマンドの識別データを含むことを特徴とする。このようにすることで、プリミティブコマンドの実行の指示を簡易に第２のモニタ手段から第１のモニタ手段に伝えることが可能になる。
【００１８】
また本発明に係る電子機器は、上記のいずれかのマイクロコンピュータと、前記マイクロコンピュータの処理対象となるデータの入力源と、前記マイクロコンピュータにより処理されたデータを出力するための出力装置とを含むことを特徴とする。このようにすれば、電子機器を動作させるプログラムなどのデバッグ作業の効率化を図れるようになり、電子機器の開発期間の短縮化、低コスト化を図れるようになる。
【００１９】
また本発明は、マイクロコンピュータを含むターゲットシステムのためのデバッグシステムであって、マイクロコンピュータの外部に設けられるデバッグツールと、前記デバッグツールとの間でデータを送受信し、デバッグツールからの受信データに基づいて、デバッグ処理を行うと共に所与のメモリの制御プログラムが格納されるアドレスへのジャンプコマンドを実行するための処理を行う第１のモニタ手段とを含むことを特徴とする。
【００２０】
本発明によれば、第１のモニタ手段により、メモリへの例えばプログラムの書き込み処理等と、プログラムのデバッグ処理の両方を行うことが可能になる。これにより、プログラムのデバッグ作業の効率化を図れ、プログラムの開発期間の短縮化を図れるようになる。
【００２１】
【発明の実施の形態】
以下、本発明の好適な実施形態について図面を用いて詳細に説明する。
【００２２】
１．本実施形態の特徴
（１）ミニモニタ部
さて、ターゲットシステムを動作させるソフトウェアの開発を支援するＩＣＥとしては、従来、図１（Ａ）に示すようなＣＰＵ置き換え型と呼ばれるＩＣＥが主流を占めていた。このＣＰＵ置き換え型ＩＣＥでは、デバッグ時にターゲットシステム３００からマイクロコンピュータ３０２を取り外し、その代わりにデバッグツール３０４のプローブ３０６を接続する。そして、このデバッグツール３０４に、取り外したマイクロコンピュータ３０２の動作をエミュレートさせる。また、このデバッグツール３０４に、デバッグのために必要な種々の処理を行わせる。
【００２３】
しかしながら、このＣＰＵ置き換え型ＩＣＥには、プローブ３０６のピン数が多くなると共にプローブ３０６の線３０８が増えるという欠点があった。このため、マイクロコンピュータ３０２の高周波数動作をエミュレートすることが困難になる（例えば３３ＭＨＺ程度が限界）。またターゲットシステム３００の設計も困難になる。更に、マイクロコンピュータ３０２を実装して動作させる実動作時とデバッグツール３０４でマイクロコンピュータ３０２の動作をエミュレートするデバッグモード時とで、ターゲットシステム３００の動作環境（信号のタイミング、負荷条件）が変化してしまう。またこのＣＰＵ置き換え型ＩＣＥには、マイクロコンピュータが異なれば、たとえそれが派生品であっても、設計が異なるデバッグツールや、ピン数やピンの位置が異なるプローブを使用しなければならないという問題もあった。
【００２４】
一方、このようなＣＰＵ置き換え型ＩＣＥの欠点を解消するものとして、図１（Ｂ）に示すような、モニタプログラム３１０をターゲットシステム３１２に実装するタイプのＩＣＥが知られている。しかしながら、これまでのモニタプログラム実装型ＩＣＥでは、モニタプログラム３１０に、全てのデバッグコマンド（プログラムのロード、ＧＯ、ステップ実行、メモリのリード・ライト、内部レジスタのリード・ライト、ブレークポイントの設定・解除）を実行する機能を持たせる必要があった。したがって、モニタプログラム３１０の命令コードサイズが非常に大きくなってしまう（例えば３０〜５０Ｋバイト）。このため、ユーザが自由に使用できるメモリ領域が減ってしまうと共に、デバッグ時とデバッグ時以外でシステムが異なってしまうという問題があった。図１（Ｂ）の問題点を解決する方法として、モニタプログラムをチップ上にのせるオンチップデバッグという方法があるが、命令コードサイズが大きなモニタプログラムをチップ内に設けると、チップのサイズを大きくしてしまうという問題点がある。
【００２５】
このような問題を解決するために、本実施形態では、モニタ部を、ミニモニタ部とメインモニタ部に分割する手法を採用している。
【００２６】
即ち図２に示すように、本実施形態では、マイクロコンピュータ１０が、ＣＰＵ（中央処理ユニット）１２及びミニモニタ部（第１のモニタ手段）１４を含む。また、マイクロコンピュータ１０の外部にはメインモニタ部（第２のモニタ手段）１６が設けられている。ここでメインモニタ部１６は、例えばホストシステムなどが発行したデバッグコマンドをプリミティブコマンドに変換（分解）するための処理を行う。また、ミニモニタ部１４は、メインモニタ部１６との間でデータを送受信する。そして、ミニモニタ部１４は、実行するプリミティブコマンドを、メインモニタ部１６からの受信データに基づいて決定し、プリミティブコマンドを実行するための処理を行う。
【００２７】
ここで、メインモニタ部１６の変換処理の対象となるデバッグコマンドとしては、プログラムロード、ＧＯ、ステップ実行、メモリライト、メモリリード、内部レジスタライト、内部レジスタリード、ブレークポイント設定、ブレークポイント解除などのコマンドを考えることができる。メインモニタ部１６は、これらの多様で複雑なデバッグコマンドを、例えばＧＯ、ライト（デバッグモード時におけるメモリマップ上の所与のアドレスへのライト）、リード（メモリマップ上の所与のアドレスからのリード）などの、シンプルでプリミティブなコマンドに変換する処理を行う。このようにすることで、ミニモニタ部１４の処理を行うミニモニタプログラムの命令コードサイズを格段に小さくすることができる。これにより、マイクロコンピュータ１０のオンチップデバッグ機能を実現できるようになる。
【００２８】
即ち、図１（Ｂ）に示すようなタイプのＩＣＥでは、モニタプログラム３１０は、プログラムロード、ＧＯ、ステップ実行などのデバッグコマンドの全ての処理ルーチンを有している。このため、モニタプログラム３１０の命令コードサイズが非常に大きくなり（例えば３０〜５０Ｋバイト）、モニタプログラム３１０をマイクロコンピュータ３１４に内蔵することは事実上困難となる。
【００２９】
これに対して、本実施形態では、ミニモニタ部１４の処理を行うミニモニタプログラムは、ＧＯ、ライト、リードなどのシンプルなプリミティブコマンドの処理ルーチンのみを有し、命令コードサイズが非常に小さい（例えば２５６バイト）。したがって、ミニモニタプログラムをマイクロコンピュータ１０に内蔵することが可能となり、オンチップデバッグ機能を実現できるようになる。また、ユーザが自由に使用できるメモリ領域の減少を最小限に抑える、あるいは全く減少しないようにすることが可能になる。
【００３０】
（２）外部ルーチンジャンプ
さて、図１６に示すように本実施形態では、上記のプリミティブコマンドとして、ＧＯ、ライト、リードコマンド以外に、外部ルーチンジャンプコマンド（メモリ制御プログラムが格納されるアドレスへのジャンプコマンド）を含ませている。このようにすることで、プログラムのデバッグ作業とプログラムの書き換え作業とを、デバッグツール１５及びホストシステム１７から成る統合されたシステムで行えるようになる。即ち、プログラムのデバッグ作業とプログラムの書き換え作業とを１台のホストシステム１７上で進めることができるようになる。
【００３１】
プリミティブコマンドに外部ルーチンジャンプコマンドを含ませた場合の処理の概要について図１７のフローチャートを用いて説明する。
【００３２】
まず、マイクロコンピュータ１０の内部メモリ１３（外部メモリでもよい）に、フラッシュメモリ１１（フラッシュメモリはマイクロコンピュータの外部にあってもよい）の初期化プログラム、書き込みプログラムをロードする（ステップＴ１）。
【００３３】
次に、初期化プログラムのルーチンへのジャンプを指示する外部ルーチンジャンプコマンドを、メインモニタ部１６がミニモニタ部１４に送信する（ステップＴ２）。すると、ミニモニタ部１４がこの外部ルーチンジャンプコマンドを実行する処理を行い、これにより、ミニモニタプログラムから初期化プログラムのルーチンへのジャンプが行われる（ステップＴ３）。そして、初期化プログラムが実行され、フラッシュメモリ１１の消去動作が行われる（ステップＴ４）。
【００３４】
次に、書き込みプログラムへのジャンプを指示する外部ルーチンジャンプコマンド（ライトデータを含む）を、メインモニタ部１６がミニモニタ部１４に送信する（ステップＴ５）。すると、ミニモニタ部１４がこの外部ルーチンジャンプコマンドを実行する処理を行い、これにより、ミニモニタプログラムから書き込みプログラムのルーチンへのジャンプが行われる（ステップＴ６）。そして、書き込みプログラムが実行され、フラッシュメモリ１１への書き込み動作が行われる（ステップＴ７）。そして、メインモニタ部１６は、ユーザプログラムを構成する全てのデータがフラッシュメモリ１１に書き込まれるまで、書き込みプログラムへのジャンプを指示するコマンドをミニモニタ部１４に送り続ける（ステップＴ８）。このようにして、フラッシュメモリ１１のプログラムの書き換え作業が終了する。
【００３５】
図１５の構成では、プログラムのデバッグ作業はホストシステム４１０上で行い、プログラムの書き換え作業はホストシステム４１４上で行うことになる。このため作業が非効率化する。
【００３６】
本実施形態では、まずホストシステム１７上で、ミニモニタ部１４、メインモニタ部１６の機能を利用してプログラムのデバッグ作業を行う。そして、バグが見つかった場合には、外部ルーチンコマンドを利用して、上記のようにプログラムの書き換え作業を行う。そして、書き換え終了後に再度デバッグ作業を行う。このように本実施形態では、プログラムのデバッグ作業とプログラムの書き換え作業を、１台のホストシステム１７上でできるようになるため、作業を大幅に効率化できるようになる。
【００３７】
なお、図１６では、モニタ部をミニモニタ部１４とメインモニタ部１６に分割し、ミニモニタ部１４のみをマイクロコンピュータ１０に内蔵させている。しかしながら、図１８に示すようにこのような分割を行わないで、モニタ部１８のみを設けるようにしてもよい。
【００３８】
２．詳細な構成例
図３に本実施形態のマイクロコンピュータ及びデバッグシステムの詳細な構成例を示す。図３に示すように、マイクロコンピュータ２０は、ＣＰＵ２２、ＢＣＵ（バス制御ユニット）２６、内部メモリ（ミニモニタＲＯＭ４２及びミニモニタＲＡＭ４４以外の内部ＲＯＭ及び内部ＲＡＭ）２８、クロック生成部３０、フラッシュメモリ３８、ミニモニタ部４０（第１のモニタ手段）、トレース部５０を含む。
【００３９】
ここでＣＰＵ２２は、種々の命令の実行処理を行うものであり、内部レジスタ２４を含む。内部レジスタ２４は、汎用レジスタであるＲ０〜Ｒ１５や、特殊レジスタであるＳＰ（スタックポインタレジスタ）、ＡＨＲ（積和結果データの上位レジスタ）、ＡＬＲ（積和結果データの下位レジスタ）などを含む。
【００４０】
ＢＣＵ２６はバスを制御するものである。例えば、ＣＰＵ２２に接続されるハーバードアーキテクチャのバス３１や、内部メモリ２８に接続されるバス３２や、外部メモリ３６に接続される外部バス３３や、フラッシュメモリ３８、ミニモニタ部４０、トレース部５０などに接続される内部バス３４の制御を行う。
【００４１】
またクロック生成部３０は、マイクロコンピュータ２０内で使用される各種のクロックを生成するものである。クロック生成部３０はＢＣＬＫを介して外部のデバッグツール６０にもクロックを供給している。
【００４２】
フラッシュメモリ３８はユーザプログラム等を格納するためのものである。なお、フラッシュメモリ３８をマイクロコンピュータ２０の外部に設けてもよい。
【００４３】
また図３では、メモリ制御プログラムである初期化プログラム、書き込みプログラムを内部メモリ２８にロードしているが、外部メモリ３６にロードするようにしてもよい。
【００４４】
ミニモニタ部４０は、ミニモニタＲＯＭ４２、ミニモニタＲＡＭ４４、制御レジスタ４６、ＳＩＯ４８を含む。
【００４５】
ここで、ミニモニタＲＯＭ４２には、ミニモニタプログラムが格納される。本実施形態では、このミニモニタプログラムは、ＧＯ、リード、ライトなどのシンプルでプリミティブなコマンドの処理のみを行うようになっている。このため、ミニモニタＲＯＭ４２のメモリ容量を例えば２５６バイト程度に抑えることができ、オンチップデバッグ機能を持たせながらマイクロコンピュータ２０を小規模化できるようになる。
【００４６】
ミニモニタＲＡＭ４４には、デバッグモードへの移行時に（ユーザプログラムのブレーク発生時に）、ＣＰＵ２２の内部レジスタ２４の内容が退避される。これにより、デバッグモードの終了後にユーザプログラムの実行を適正に再スタートできるようになる。また内部レジスタの内容のリード等を、ミニモニタプログラムが持つプリミティブなリードコマンド等で実現できるようになる。
【００４７】
制御レジスタ４６は、各種のデバッグ処理を制御するためのレジスタであり、ステップ実行イネーブルビット、ブレークイネーブルビット、ブレークアドレスビット、トレースイネーブルビットなどを有する。ミニモニタプログラムにより動作するＣＰＵ２２が制御レジスタ４６の各ビットにデータをライトしたり、各ビットのデータをリードすることで、各種のデバッグ処理が実現される。
【００４８】
ＳＩＯ４８は、マイクロコンピュータ２０の外部に設けられたデバッグツール６０との間でデータを送受信するためのものである。ＳＩＯ４８とデバッグツール６０との間は、ＴＸＤ／ＲＸＤ（データ送受信ライン）で接続されている。
【００４９】
トレース部５０は、リアルタイムトレース機能を実現するためのものである。トレース部５０とデバッグツール６０との間は、ＣＰＵ２２の命令実行のステートを表す３ビットのＤＳＴ［２：０］と、分岐先のＰＣ（プログラムカウンタ）値を表すＤＰＣＯという４本のラインで接続されている。
【００５０】
デバッグツール６０はメインモニタ部６２を含み、パーソナルコンピュータ等により実現されるホストシステム６６に接続される。ホストシステム６６が、ユーザの操作により、プログラムロード、ステップ実行などのデバッグコマンドを発行すると、メインモニタ部６２が、このデバッグコマンドをプリミティブコマンドに変換（分解）するための処理を行う。そして、メインモニタ部６２が、プリミティブコマンドの実行を指示するデータをミニモニタ部４０に送信すると、ミニモニタ部４０が、指示されたプリミティブコマンドを実行するための処理を行うことになる。
【００５１】
図４に、デバッグモード時のメモリマップの例を示す。図４のＤ１、Ｄ２、Ｄ３に示すように、デバッグモード時には、図３の制御レジスタ４６、ミニモニタＲＡＭ４４、ミニモニタＲＯＭ４２のアドレスも、メモリマップ上に割り付けられる。
【００５２】
３．プリミティブコマンドへの変換
図５（Ａ）、（Ｂ）、（Ｃ）、（Ｄ）に、各種のデバッグコマンドをプリミティブコマンドへ変換する処理について模式的に示す。
【００５３】
例えば図５（Ａ）に示すように、（ＡＤＤ・・・、ＳＵＢ・・・、ＡＮＤ・・・、ＯＲ・・・、ＸＯＲ・・・、ＬＤ．Ｗ・・・）という１２バイトのプログラムを８００１０ｈ番地にロードするというデバッグコマンドが発行されたとする。この場合、このプログラムロードコマンドは、ライト（８００１０ｈ、ＡＤＤ・・・、ＳＵＢ）、ライト（８００１４ｈ、ＡＮＤ・・・、ＯＲ・・・）、ライト（８００１８ｈ、ＸＯＲ・・・、ＬＤ．Ｗ・・・）という３つのプリミティブなライトコマンドに変換される。即ち、ミニモニタプログラムが、この３つのプリミティブなライトコマンドを実行することで、プログラムロードコマンドが実現されるようになる。
【００５４】
また図５（Ｂ）に示すようにステップ実行コマンドというデバッグコマンドが発行されたとする。すると、このステップ実行コマンドは、図３の制御レジスタ４６のステップ実行イネーブルビットへのライトコマンド（図４のＤ１のアドレスへのライトコマンド）とＧＯコマンドに変換される。即ち、ミニモニタプログラムが、このプリミティブなライトコマンドとＧＯコマンドを実行することで、ステップ実行コマンドが実現されるようになる。
【００５５】
また図５（Ｃ）に示すように内部レジスタリードコマンドというデバッグコマンドが発行されたとする。すると、この内部レジスタリードコマンドは、メモリマップ上のミニモニタＲＡＭ４４（内部レジスタの内容の退避先）からのリードコマンド（図４のＤ２のアドレスからのリードコマンド）に変換される。即ち、ミニモニタプログラムが、このプリミティブなリードコマンドを実行することで、内部レジスタリードコマンドが実現されるようになる。内部レジスタライトコマンド、メモリリードコマンド、メモリライトコマンドも同様にして実現される。
【００５６】
また図５（Ｄ）に示すようにブレークポイント設定コマンドというデバッグコマンドが発行されたとする。すると、このブレークポイント設定コマンドは、制御レジスタ４６のブレークイネーブルビット及びブレークアドレスビットへのライトコマンドに変換される。即ち、ミニモニタプログラムが、このプリミティブなライトコマンドを実行することで、ブレークポイント設定コマンドが実現されるようになる。
【００５７】
このように本実施形態では、複雑で多様なデバッグコマンドが、プリミティブでシンプルなリード、ライト、ＧＯコマンドに変換される。そして、ミニモニタプログラムは、このプリミティブなリード、ライト、ＧＯコマンドを実行するだけでよいため、ミニモニタプログラムの命令コードサイズは非常に小さくなる。この結果、ミニモニタＲＯＭ４２のメモリ容量も小さくでき、小さなハードウェア規模でオンチップデバッグ機能を実現できるようになる。
【００５８】
４．ＳＩＯの構成例
図６にＳＩＯ４８の構成例を示す。ＳＩＯ４８は、送受信バッファ７０、シフトレジスタ７６、送受信切替部７８、クロック制御部８０及び制御レジスタ８４を含む。
【００５９】
ここで送受信バッファ７０は、送信データ、受信データを一時的に蓄えるためのものであり、送信バッファ７２、受信バッファ７４を有する。シフトレジスタ７６は、送信バッファ７２からの送信データをパラレルデータからシリアルデータに変換し送受信切替部７８に出力する機能を有する。また送受信切替部７８からの受信データをシリアルデータからパラレルデータに変換し受信バッファ７４に出力する機能も有する。送受信切替部７８は、データの送信と受信とを切り替えるためのものである。これにより、ＴＸＤ／ＲＸＤを使用した半２重のデータ送受信が可能になる。
【００６０】
クロック制御部８０は、内蔵する分周回路８２によりＢＣＬＫを分周し、この分周により得られたサンプリングクロックＳＭＣ１をシフトレジスタ７６に出力する。シフトレジスタ７６は、このＳＭＣ１に基づき動作する。またクロック制御部８０は、デバッグツール６０にＢＣＬＫを供給する。これにより、マイクロコンピュータ２０とデバッグツール６０により、ＢＣＬＫが共有されるようになる。
【００６１】
分周回路８２での分周比は制御レジスタ８４により設定される。即ちＣＰＵ２２により実行されるミニモニタプログラムが、所望の分周比を制御レジスタ８４に書き込むことで、分周回路８２での分周比が設定されることになる。なお、制御レジスタ８４のアドレスも、図３の制御レジスタ４６と同様に、図４のＤ１の位置に割り付けられている。
【００６２】
５．デバッグツールの構成例
図７にデバッグツール６０の構成例を示す。
【００６３】
ＣＰＵ９０は、ＲＯＭ１０８に格納されるプログラムを実行したり、デバッグツール６０の全体の制御を行うものである。送受信切替部９２は、データの送信と受信とを切り替えるためのものである。クロック制御部９４は、ＣＰＵ９０のＳＣＬＫ端子、アドレスアップカウンタ１００、トレースメモリ１０４に供給するクロックを制御するものである。このクロック制御部９４には、マイクロコンピュータ２０（ＳＩＯ４８）からのＢＣＬＫが入力される。クロック制御部９４は周波数検出回路９５、分周回路９６を含む。周波数検出回路９５は、ＢＣＬＫの周波数が属する周波数範囲を検出して、その結果を制御レジスタ９８に出力する。また分周回路９６での分周比は制御レジスタ９８により制御される。即ちＣＰＵ９０により実行されるメインモニタプログラム（メインモニタＲＯＭ１１０に格納）が、制御レジスタ９８からＢＣＬＫの周波数範囲を読み出す。そして、メインモニタプログラムは、この周波数範囲に応じた最適な分周比を決定し、この分周比を制御レジスタ９８に書き込む。そして、分周回路９６は、この分周比でＢＣＬＫを分周してＳＭＣ２を生成し、ＣＰＵ９０のＳＣＬＫ端子に出力する。
【００６４】
アドレスアップカウンタ１００は、トレースメモリのアドレスをカウントアップするためのものである。セレクタ１０２は、ライン１２２（アドレスアップカウンタ１００が出力するアドレス）とライン１２４（アドレスバス１２０からのアドレス）のいずれかを選択し、トレースメモリ１０４のアドレス端子にデータを出力する。またセレクタ１０６は、ライン１２６（図３のトレース部５０の出力であるＤＳＴ［２：０］、ＤＰＣＯ）とライン１２８（データバス１１８）のいずれかを選択し、トレースメモリ１０４のデータ端子にデータを出力したり、データ端子からデータを取り出す。
【００６５】
ＲＯＭ１０８はメインモニタＲＯＭ１１０（図３のメインモニタ部６２に相当）を含み、メインモニタＲＯＭ１１０には、メインモニタプログラムが格納される。このメインモニタプログラムは、図５（Ａ）〜図５（Ｄ）で説明したように、デバッグコマンドをプリミティブコマンドに変換するための処理を行う。ＲＡＭ１１２は、ＣＰＵ９０のワーク領域となるものである。
【００６６】
ＲＳ２３２Ｃインターフェース１１４、パラレルインターフェース１１６は、図３のホストシステム６６とのインターフェースとなるものであり、ホストシステム６６からのデバッグコマンドはこれらのインターフェースを介してＣＰＵ９０に入力されることになる。クロック生成部１１８は、ＣＰＵ９０を動作させるクロックなどを生成するものである。
【００６７】
次に本実施形態でのリアルタイムトレース処理について簡単に説明する。本実施形態では、図３のＣＰＵ２２の命令実行のステートを表す３ビットのＤＳＴ[２：０］と、分岐先のＰＣ値を表すＤＰＣＯをトレースメモリ１０４に蓄える。そして、トレースメモリ１０４に蓄えられたデータと、ユーザプログラムのソースコードとに基づいて、トレースデータを合成する。このようにすることで、マイクロコンピュータ２０とデバッグツール６０との間の接続ラインの本数を少なくしながら、リアルタイムトレース機能を実現することが可能になる。
【００６８】
ユーザプログラム実行モードにおいては、ライン１２２が選択され、セレクタ１０２を介してアドレスアップカウンタ１００の出力がトレースメモリ１０４のアドレス端子に入力される。また、ライン１２６が選択され、セレクタ１０６を介してＤＳＴ［２：０］、ＤＰＣＯがトレースメモリ１０５のデータ端子に入力される。ここでアドレスアップカウンタ１００には、まず最初に、データバス１１８、アドレスバス１２０を用いてＣＰＵ９０により図８（Ａ）に示すようなスタートアドレスが設定される。またアドレスアップカウンタ１００のＳＴ／ＳＰ（開始／停止）端子には、トレース範囲を特定するＤＳＴ［２］のラインが接続される。そして図８（Ｂ）に示すように、ＤＳＴ［２］のラインに第１のパルス１３０が入力されると、アドレスアップカウンタ１００のアドレスアップカウントが開始する。そして、ＤＳＴ［２］のラインに第２のパルス１３２が入力されると、アドレスアップカウンタ１００のアドレスアップカウントが停止し、トレース動作が停止する。このようにして、所望のトレース範囲でのデータ（ＤＳＴ［２：０］、ＤＰＣＯ）をトレースメモリ１０４に蓄えることが可能になる。
【００６９】
一方、ユーザプログラム実行モードからデバッグモードに移行すると、ライン１２４が選択され、セレクタ１０２を介してアドレスバス１２０からのアドレスがトレースメモリ１０４のアドレス端子に入力される。またライン１２８が選択され、セレクタ１０６を介してトレースメモリ１０４からのデータがデータバス１１８に出力される。これにより、トレースメモリ１０４に蓄えられたデータ（ＤＳＴ［２：０］、ＤＰＣＯ）を、デバッグモード時にＣＰＵ９０（メインモニタプログラム）が読み出すことが可能になる。そして、読み出されたデータとユーザープログラムのソースコードとに基づいて、トレースデータを合成することが可能になる。
【００７０】
６．データの送受信
さて、図９（Ａ）に示すように、ミニモニタ部４０とメインモニタ部６２の間でのデバッグデータの通信の手法としては、ＴＸＤ（送信）とＲＸＤ（受信）のラインを別々に設け、全２重で通信する手法が考えられる。
【００７１】
しかしながら、このようにデバッグデータの通信のために２本のライン（端子）を使用してしまうと、その分だけマイクロコンピュータの端子数（ピン数）が増えてしまい、これはマイクロコンピュータの高コスト化を招く。
【００７２】
そこで本実施形態では、図９（Ｂ）に示すように、ミニモニタ部４０とメインモニタ部６２との間に１本のＴＸＤ／ＲＸＤライン（双方向通信ライン）を設け、半２重の双方向通信を行う。このようにすることで、マイクロコンピュータの端子数の増加を最小限に抑えることができ、マイクロコンピュータの低コスト化を図れる。
【００７３】
そして更に本実施形態では、図９（Ｃ）に示すように、スレーブとなるミニモニタ部４０が、マスタとなるメインモニタ部６２からデータを受信したことを条件に、その受信データに対応する処理を行い、その受信データに対応する応答データをメインモニタ部６２に送信する。即ち、メインモニタ部６２がデータ（コマンド）をミニモニタ部４０に送信すると、ウェイト状態となっていたミニモニタ部４０がこれを受信し、その受信データに対応する処理を行う。そして、その受信データに対応するデータ（リプライ）をメインモニタ部６２に送信する。その後、ミニモニタ部４０は、メインモニタ部６２からデータを受信するまでウェイト状態になる。即ちミニモニタ部４０は、メインモニタ部６２からデータを受信するまで動作を停止し、データを受信したことを条件に動作を開始する。このようにすることで、ミニモニタ部４０とメインモニタ部６２との間の通信ラインを１本にしながら、データを適正に送受信できるようになる。
【００７４】
さて、図９（Ａ）の通信手法は、ＴＸＤとＲＸＤが別ラインになっているため、図９（Ｂ）に比べてデータを高速に通信できるという利点がある。また、ミニモニタ部４０、メインモニタ部６２の一方で通信エラーが発生した場合に、即座にエラーメッセージを他方に返すことができるという利点もある。例えば、ミニモニタ部４０で通信エラーが発生した場合には、ＲＸＤでのデータ受信の終了を待つことなくＴＸＤを使用して即座にエラーメッセージをメインモニタ部６２に返すことができる。
【００７５】
一方、本実施形態では、ミニモニタ部４０とメインモニタ部６２とでＢＣＬＫを共有させている。これにより、最適な速度で高速にデータを通信できるようになる。したがって、図９（Ａ）のような通信ラインを２本設ける構成にせずに、図９（Ｂ）のように通信ラインを１本だけ設ける構成にしても、問題なくデバッグデータを高速に送受信できるようになる。
【００７６】
また、本実施形態では、送受信データは固定長でありデータ長が短い（例えば１４バイト）。したがって、例えばミニモニタ部４０で通信エラーが発生した場合、受信処理の終了を待ってからエラーメッセージを送信しても、時間的な遅れはそれほど大きくならない。また、送受信データのデータ長が短いため、通信エラーの発生自体も最小限に抑えることができる。
【００７７】
このように本実施形態では、デバッグデータの通信ラインを１本だけ設ける構成にすることでマイクロコンピュータの端子数を減らすという利益を得ている。そしてこの利益を得るために生じる不利益（通信速度の低下、エラーメッセージの遅延）を、ＢＣＬＫを共有化したり送受信データを固定長の短いデータにすることで解消している。
【００７８】
７．送受信データのフォーマット及び種類
図１０（Ａ）に、ＴＸＤ／ＲＸＤのラインで送受信されるデータのフォーマット例を示す。送受信データは、１バイトのＩＤ（コマンド識別データ）、１バイトのデータサイズ、４バイトのアドレス、４バイトのデータ１、４バイトのデータ２から成る１４バイトの固定長データになっている。
【００７９】
図１０（Ｂ）に示すように、メインモニタ部６２がミニモニタ部４０にＧＯコマンドの実行を指示する場合、ミニモニタ部４０が受信するデータのＩＤには、ＧＯコマンドの識別データである００ｈが設定される。そしてこの場合には、ミニモニタ部４０は、メインモニタ部６２にデータを送信しない。
【００８０】
図１０（Ｃ）に示すように、メインモニタ部６２がライトコマンドの実行を指示する場合、ミニモニタ部４０の受信データのＩＤには、ライトコマンドの識別データである０１ｈが設定される。また受信データのアドレス、データ１、データ２には、各々、ライトアドレス、ライトデータ１、ライトデータ２が設定される。そして、ミニモニタ部４０の送信データのデータ１には０１ｈが設定される。
【００８１】
なお、ライトコマンドを、バイトデータのライトコマンド、ハーフワードデータのライトコマンド、ワードデータのライトコマンド、ダブルワードデータのライトコマンドというように、ライトするデータの長さに応じて複数種類用意するようにしてもよい。このようにした場合には、各々のライトコマンドに対して異なったＩＤを割り振ることになる。
【００８２】
図１０（Ｄ）に示すように、メインモニタ部６２がリードコマンドの実行を指示する場合、ミニモニタ部４０の受信データのＩＤには、リードコマンドの識別データである０２ｈが設定される。また受信データのアドレスにはリードアドレスが設定される。そして、ミニモニタ部４０の送信データのデータ１、データ２には、各々、リードコマンド処理で得られたリードデータ１、リードデータ２が設定される。
【００８３】
さて、本実施形態では、ミニモニタ部６２が実行するプリミティブコマンドとして、ＧＯ、ライト、リードコマンド以外にも、外部ルーチンジャンプ、データフィルなどのコマンドを用意している。
【００８４】
ここで外部ルーチンジャンプコマンドは、外部ルーチンにジャンプすることを指示するコマンドである。このような外部ルーチンジャンプコマンドを用いることで、例えばフラッシュメモリ（ＥＥＰＲＯＭ）の初期化プログラムや書き込みプログラムのルーチンへのジャンプが可能になる。そして図１１（Ａ）に示すように、メインモニタ部６２が外部ルーチンジャンプコマンドの実行を指示する場合、ミニモニタ部４０の受信データのＩＤには、外部ルーチンジャンプコマンドの識別データである０３ｈが設定される。また受信データのデータサイズ、アドレス、データ１、データ２には、各々、１８ｈ（誤動作防止チェック）、％Ｒ１２（ルーチンアドレス）、％Ｒ１３（ライトデータ）、％Ｒ１４（データアドレス）が設定される。そして、ミニモニタ部４０の送信データのデータ１には、％Ｒ１０（戻り値。戻り値が０の場合に正常終了）が設定される。
【００８５】
またデータフィルコマンドは、メモリを所与の値（例えば０）でフィルするためのコマンドである。例えば大容量のメモリの全てのビットを０の値に設定する場合、ライトコマンドを用いたのでは処理時間が非常に長くなる。このような場合、データフィルコマンドが有効になる。そして図１１（Ｂ）に示すように、メインモニタ部６２がデータフィルコマンドの実行を指示する場合、ミニモニタ部４０の受信データのＩＤには、データフィルコマンドの識別データである０４ｈが設定される。また受信データのデータサイズ、アドレス、データ１、データ２には、各々、データサイズである１、２又は４、スタートアドレス、フィル回数、フィルパターンが設定される。
【００８６】
このように本実施形態では、メインモニタ部６２からの受信データに、ミニモニタ部４０が実行するプリミティブコマンドの識別データＩＤを含ませている。このようにすることで、プリミティブコマンドの実行の指示を簡易にミニモニタ部４０に伝えることが可能になる。
【００８７】
８．ミニモニタ部の詳細な処理例
次にミニモニタ部の詳細な処理例について説明する。
【００８８】
図１２に示すように、ユーザプログラムの実行中にブレークが発生すると、ミニモニタプログラムの処理がスタートし、ユーザプログラム実行モードからデバッグモードに移行する。そして、ミニモニタプログラムが所与のコマンド処理を行いリターン命令を実行すると、デバッグモードからユーザプログラム実行モードに戻る。
【００８９】
図１３、図１４に、デバッグモードでのミニモニタプログラムの処理を表すフローチャートを示す。
【００９０】
デバッグモードに移行すると、ミニモニタプログラムは、まず、図３のＣＰＵ２２の内部レジスタ２４の内容をミニモニタＲＡＭ４４に退避する（ステップＳ１）。そして、ミニモニタプログラムが使用する制御レジスタ４６の設定処理を行う（ステップＳ２）。
【００９１】
次に、デバッグツール６０から受信した１４バイトのデータ（図１０（Ａ）参照）を、受信バッファ７４（図６参照）にライトする（ステップＳ３）。そして、受信バッファ７４のデータの先頭の１バイト（コマンド識別データＩＤ）をチェックする（ステップＳ４）。
【００９２】
そして図１４に示すように、ＩＤがリードコマンドを示すものであった場合には（図１０（Ｄ）参照）、受信バッファ７４からリードアドレスを取得する（ステップＳ５、Ｓ６）。そして、取得したリードアドレスからデータをリードし、送信バッファ７２にライトする（ステップＳ７）。次に、送信バッファ７２のデータをデバッグツール６０に送信する（ステップＳ８）。そして、図１３のステップＳ３に戻り、次の受信データを受信バッファ７４にライトする。
【００９３】
ＩＤがライトコマンドを示すものであった場合には（図１０（Ｃ）参照）、受信バッファ７４からライトアドレスを取得する（ステップＳ９、Ｓ１０）。そして、受信バッファ７４からライトデータを取得し、ステップＳ１０で取得したライトアドレスにライトする（ステップＳ１１）。
【００９４】
ＩＤが外部ルーチンジャンプコマンドを示すものであった場合には（図１１（Ａ）参照）、受信バッファ７４からルーチンアドレスを取得する（ステップＳ１２、Ｓ１３）。そして、外部ルーチンにジャンプ後、ミニモニタプログラムにリターンする（ステップＳ１４）。
【００９５】
ＩＤがＧＯコマンドを示すものであった場合には（図１１（Ｂ）参照）、ミニモニタＲＡＭ４４に退避したデータを内部レジスタ２４にリストアする（ステップＳ１５、Ｓ１６）。そして、図１２に示すようにユーザプログラムにリターンし、デバッグモードから抜ける（ステップＳ１７）。
【００９６】
一方、ＩＤがリード、ライト、外部ルーチンジャンプ、ＧＯコマンドのいずれでもなかった場合には、処理が必要ないと判断する（ステップＳ１５、Ｓ１８）。そして送信バッファ７２にダミーのデータをライトする（ステップＳ１９）。なお、図１４では、データフィルコマンドの処理については省略している。
【００９７】
以上のようにして、デバッグコマンドを変換することで得られたプリミティブコマンドが、ミニモニタプログラムにより実行されることになる。
【００９８】
９．外部ルーチンジャンプ処理の詳細例
次に外部ルーチンジャンプ処理の詳細例について図１９、図２０のフローチャートを用いて説明する。
【００９９】
図１３、図１４のステップＳ４、Ｓ１２等で既に説明したように、まず、受信バッファ７４のデータの先頭の１バイト（ＩＤ）をチェックし、ＩＤが外部ルーチンジャンプコマンド以外を示すものであった場合には他のコマンド処理へ移行する（ステップＵ１、Ｕ２、Ｕ３）。一方、ＩＤが外部ルーチンジャンプコマンドを示すものであった場合には、受信バッファ７４からルーチンアドレス（図１１（Ａ）参照）を取得し、このルーチンアドレスを内部レジスタＲ１２（図３の内部レジスタ２４参照）にライトする（ステップＵ４）。同様に、受信バッファ７４からライトアドレス、データアドレスを取得し、これらのライトアドレス、データアドレスを、各々、内部レジスタＲ１３、Ｒ１４にライトする（ステップＵ５、Ｕ６）。次に、戻りアドレスを内部レジスタＲ１５にライトする（ステップＵ７）。そして、内部レジスタＲ１２にライトされたルーチンアドレスへのジャンプ命令を実行する（ステップＵ８）。これにより、外部ルーチンの処理、例えば図３のフラッシュメモリ３８の書き込みプログラムの処理に移行する。
【０１００】
なお内部レジスタ２４の内容は、図１３のステップＳ１で既にミニモニタＲＡＭ４４に退避されている。したがって、上記のように内部レジスタＲ１２、Ｒ１３、Ｒ１４、Ｒ１５にルーチンアドレス、ライトデータ、データアドレス、戻りアドレスをライトしても問題は生じない。
【０１０１】
図２０に示すように書き込みプログラムの処理に移行すると、書き込みプログラムが、図１９のステップＵ５で内部レジスタＲ１３にライトされたライトデータをリードする（ステップＵ９）。次に、ステップＵ６で内部レジスタＲ１４にライトされたデータアドレスをリードする（ステップＵ１０）。そして、ステップＵ９で得られたライトデータをステップＵ１０で得られたデータアドレスにライトした後、ウェイト状態に移行する（ステップＵ１１）。
【０１０２】
次に、書き込みプログラムが、フラッシュメモリ３８にデータが正しく書き込まれたか否かをベリファイする（ステップＵ１２）。そして、データが正しく書き込まれなかった場合には、所与の回数だけ再試行を繰り返す（ステップＵ１３、Ｕ１４、Ｕ１５）。
【０１０３】
所与の回数再試行を繰り返しても、データが正しく書き込まれなかった場合には、内部レジスタＲ１０に戻り値（図１１（Ａ）の送信データを参照）として１をライトする（ステップＵ１６）。一方、ステップＵ１３でデータが正しく書き込まれたと判断した場合には、内部レジスタＲ１０に戻り値として０をライトする（ステップＵ１７）。この戻り値（エラーフラグ）は、メインモニタ部６２に送信される。したがって、メインモニタ部６２は、この戻り値をチェックすることで、データが正しく書き込まれたか否かを知ることができるようになる。
【０１０４】
最後に、図１９のステップＵ７で内部レジスタＲ１５に書き込まれた戻りアドレスにジャンプする（ステップＵ１８）。これにより、処理が、書き込みプログラムからミニモニタプログラムに再び戻ることになる。
【０１０５】
以上の書き込みプログラムの処理を複数回繰り返すことで、即ちメインモニタ部６２が外部ルーチンジャンプコマンドを指示するデータを複数回送信することで、フラッシュメモリ３８にユーザプログラムを書き込んだり、書き込まれていたユーザプログラムを書き換えたりすることが可能になる。
【０１０６】
１０．電子機器
次に、以上の本実施形態のマイクロコンピュータを含む電子機器に関して説明する。
【０１０７】
例えば図２１（Ａ）に電子機器の１つであるカーナビゲーションシステムの内部ブロック図を示し、図２２（Ａ）にその外観図を示す。カーナビゲーションシステムの操作はリモコン５１０を用いて行われ、ＧＰＳやジャイロからの情報に基づいて位置検出部５２０が車の位置を検出する。地図などの情報はＣＤＲＯＭ５３０（情報記憶媒体）に格納されている。画像メモリ５４０は画像処理の際の作業領域になるメモリであり、生成された画像は画像出力部５５０を用いて運転者に表示される。マイクロコンピュータ５００は、リモコン５１０、位置検出部５２０、ＣＤＲＯＭ５３０などのデータ入力源からデータを入力し、種々の処理を行い、処理後のデータを画像出力部５５０などの出力装置を用いて出力する。
【０１０８】
図２１（Ｂ）に電子機器の１つであるゲーム装置の内部ブロック図を示し、図２２（Ｂ）にその外観図を示す。このゲーム装置では、ゲームコントローラ５６０からのプレーヤの操作情報、ＣＤＲＯＭ５７０からのゲームプログラム、ＩＣカード５８０からのプレーヤ情報等に基づいて、画像メモリ５９０を作業領域としてゲーム画像やゲーム音を生成し、画像出力部６１０、音出力部６００を用いて出力する。
【０１０９】
図２１（Ｃ）に電子機器の１つであるプリンタの内部ブロック図を示し、図２２（Ｃ）にその外観図を示す。このプリンタでは、操作パネル６２０からの操作情報、コードメモリ６３０及びフォントメモリ６４０から文字情報に基づいて、ビットマップメモリ６５０を作業領域として、印刷画像を生成し、プリント出力部６６０を用いて出力する。またプリンタの状態やモードを表示パネル６７０を用いてユーザに伝える。
【０１１０】
本実施形態のマイクロコンピュータ又はデバッグシステムによれば、図２１（Ａ）〜図２２（Ｃ）の電子機器を動作させるユーザプログラムの開発の容易化、開発期間の短縮化を図れるようになる。特に、本実施形態のマイクロコンピュータ又はデバッグシステムによれば、ユーザプログラムのデバッグ作業とユーザプログラムの書き換え作業を１台のホストシステム上で行うことができる。したがって、ユーザプログラムの開発期間を格段に短縮化できるようになる。またマイクロコンピュータが実動作する環境と同じ環境で、ユーザプログラムのデバッグ作業を行うことができるため、電子機器の信頼性を高めることができる。また電子機器に組み込まれるマイクロコンピュータのハードウェアを小規模化、低コスト化できるため、電子機器の低コスト化も図れるようになる。更にミニモニタプログラムの命令コードサイズは小さいため、ユーザがプログラムや各種データの格納に使用するメモリ領域を、全く使用しないようにすることが可能になる。
【０１１１】
なお本実施形態のマイクロコンピュータを適用できる電子機器としては、上記以外にも例えば、携帯電話（セルラーフォン）、ＰＨＳ、ページャ、オーディオ機器、電子手帳、電子卓上計算機、ＰＯＳ端末、タッチパネルを備えた装置、プロジェクタ、ワードプロセッサ、パーソナルコンピュータ、テレビ、ビューファインダ型又はモニタ直視型のビデオテープレコーダなど種々のものを考えることができる。
【０１１２】
なお、本発明は本実施形態に限定されず、本発明の要旨の範囲内で種々の変形実施が可能である。
【０１１３】
例えば、本実施形態ではモニタ部をミニモニタ部とメインモニタ部に分割した場合を主に例にとり説明したが、本発明はこれに限定されるものではない。
【０１１４】
また本実施形態では、所与のメモリの例としてフラッシュメモリを用いたが、本発明は、フラッシュメモリ以外の種々のメモリに適用できる。またメモリ制御プログラムも、初期化プログラムや書き込みプログラムに限られるものではない。
【０１１５】
またマイクロコンピュータやミニモニタ部（第１のモニタ手段）の構成も本実施形態で説明したものに限定されず、種々の変形実施が可能である。
【０１１６】
またデバッグシステムの構成も図７に示すものに限られるものではない。
【０１１７】
【図面の簡単な説明】
【図１】図１（Ａ）はＣＰＵ置き換え型のＩＣＥ、図１（Ｂ）はモニタプログラム実装型ＩＣＥの例を示す図である。
【図２】ミニモニタ部について説明するための図である。
【図３】本実施形態のマイクロコンピュータ、デバッグシステムの構成例を示す機能ブロック図である。
【図４】デバッグモード時のメモリマップを示す図である。
【図５】図５（Ａ）、（Ｂ）、（Ｃ）、（Ｄ）は、デバッグコマンドをプリミティブコマンドへ変換（分解）する処理について説明するための図である。
【図６】ＳＩＯの構成例を示す機能ブロック図である。
【図７】デバッグツールの構成例を示す機能ブロック図である。
【図８】図８（Ａ）、（Ｂ）は、リアルタイムトレース処理について説明するための図である。
【図９】図９（Ａ）、（Ｂ）、（Ｃ）は、ミニモニタ部とメインモニタ部との間の通信手法について説明するための図である。
【図１０】図１０（Ａ）、（Ｂ）、（Ｃ）、（Ｄ）は、送受信データのフォーマット及び種類について説明するための図である。
【図１１】図１１（Ａ）、（Ｂ）も、送受信データのフォーマット及び種類について説明するための図である。
【図１２】ユーザプログラム実行モードからデバッグモードへの移行について説明するための図である。
【図１３】本実施形態の詳細な処理例を説明するためのフローチャートである。
【図１４】本実施形態の詳細な処理例を説明するためのフローチャートである。
【図１５】ターゲットシステムに接続されたＲＯＭライタを用いてフラッシュメモリのプログラムを書き換えるシステムの構成について示す図である。
【図１６】本実施形態の特徴について説明するための図である。
【図１７】プリミティブコマンドに外部ルーチンジャンプコマンドを含ませた場合の処理の概要について説明するためのフローチャートである。
【図１８】モニタ部をミニモニタ部とメインモニタ部に分割しない構成について説明するための図である。
【図１９】外部ルーチンジャンプ処理の詳細について説明するためのフローチャートである。
【図２０】外部ルーチンである書き込みプログラムの処理の詳細について説明するためのフローチャートである。
【図２１】図２１（Ａ）、（Ｂ）、（Ｃ）は、種々の電子機器の内部ブロック図の例である。
【図２２】図２２（Ａ）、（Ｂ）、（Ｃ）は、種々の電子機器の外観図の例である。
【符号の説明】
１０    マイクロコンピュータ
１１    フラッシュメモリ（所与のメモリ）
１２    ＣＰＵ（中央処理ユニット）
１３    内部メモリ
１４    ミニモニタ部（第１のモニタ手段）
１５    デバッグツール
１６    メインモニタ部（第２のモニタ手段）
１７    ホストシステム
２０    マイクロコンピュータ
２２    ＣＰＵ（中央処理ユニット）
２４    内部レジスタ
２６    ＢＣＵ（バス制御ユニット）
２８    内部メモリ
３０    クロック生成部
３１    バス
３２    バス
３３    外部バス
３４    内部バス
３６    外部メモリ
３８    フラッシュメモリ（所与のメモリ）
４０    ミニモニタ部（第１のモニタ手段）
４２    ミニモニタＲＯＭ
４４    ミニモニタＲＡＭ
４６    制御レジスタ
４８    ＳＩＯ
５０    トレース部
６０    デバッグツール
６２    メインモニタ部（第２のモニタ手段）
６６    ホストシステム
７０    送受信バッファ
７２    送信バッファ
７４    受信バッファ
７６    シフトレジスタ
７８    送受信切替部
８０    クロック制御部
８２    分周回路
８４    制御レジスタ
９０    ＣＰＵ
９２    送受信切替部
９４    クロック制御部
９５    周波数検出部
９６    分周回路
９８    制御レジスタ
１００  アドレスアップカウンタ
１０２  セレクタ
１０４  トレースメモリ
１０６  セレクタ
１０８  ＲＯＭ
１１０  メインモニタＲＯＭ
１１２  ＲＡＭ
１１４  ＲＳ２３２Ｃインターフェース
１１６  パラレルインターフェース
１１８  クロック生成部
【図１】
0003671667.tif 000002
【図２】
0003671667.tif 000003
【図３】
0003671667.tif 000004
【図４】
0003671667.tif 000005
【図５】
0003671667.tif 000006
【図６】
0003671667.tif 000007
【図７】
0003671667.tif 000008
【図８】
0003671667.tif 000009
【図９】
0003671667.tif 000010
【図１０】
0003671667.tif 000011
【図１１】
0003671667.tif 000012
【図１２】
0003671667.tif 000013
【図１３】
0003671667.tif 000014
【図１４】
0003671667.tif 000015
【図１５】
0003671667.tif 000016
【図１６】
0003671667.tif 000017
【図１７】
0003671667.tif 000018
【図１８】
0003671667.tif 000019
【図１９】
0003671667.tif 000020
【図２０】
0003671667.tif 000021
【図２１】
0003671667.tif 000022
【図２２】
0003671667.tif 000023