(57)【要約】      （修正有）【課題】プログラムの再実行時のフラッシュメモリへの書き換え操作を無くして再実行に要する時間を短縮し、フラッシュメモリの劣化を防止。【解決手段】ユーザが指定したフラッシュメモリ上のブレークポイントの命令コードを取り出して退避させると共に当該命令をプログラムを停止させる命令コードに書き換え、ユーザからの指示によりプログラムの実行を開始し、最初に上記ブレークポイントに到達した時にＲＡＭ上の所定の第一アドレスに前記退避させた命令を書き込むと共に、前記第一アドレスの次のアドレスにフラッシュメモリ上の当該ブレークポイントの次の命令にジャンプさせる命令を書き込み、プログラムカウンタの値を前記ＲＡＭの前記第一のアドレスに設定してプログラムを再実行させ、前記ブレークポイントに第二回目以降到達した場合のプログラムの再実行に於いては、プログラムカウンタの値を前記ＲＡＭの前記第一のアドレスに設定する。【選択図】図２
2006268472.tif 000002
【特許請求の範囲】
【請求項１】
ユーザが指定したフラッシュメモリ上の少なくとも一つのブレークポイントの命令コードを取り出して退避させると共に当該ブレークポイントの命令をプログラムを停止させる命令コードに書き換えるステップと、
ユーザからの指示によりプログラムの実行を開始し、最初に上記ブレークポイントに到達した時にＲＡＭ上の所定の第一アドレスに前記退避させた命令を書き込むと共に、前記第一アドレスの次のアドレスにフラッシュメモリ上の当該ブレークポイントの次の命令にジャンプさせる命令を書き込むステップと、
プログラムカウンタの値を前記ＲＡＭの前記第一のアドレスに設定してプログラムを再実行させるステップと、
前記ブレークポイントに第二回目以降到達した場合のプログラムの再実行に於いては、プログラムカウンタの値を前記ＲＡＭの前記第一のアドレスに設定することによりプログラムの実行を開始させるステップと、
を含むことを特徴とするフラッシュメモリ上のプログラムデバッグ方法。
【請求項２】
ホストコンピュータとユーザインターフェースとターゲットボードを含むデバッグシステムにおいて、
前記ターゲットボード内のフラッシュメモリに於ける少なくとも一つのブレークポイントの命令を退避させるための手段と、
前記退避させた命令を所定の第一アドレスに書き込と共に当該第一アドレスの次のアドレスに前記フラッシュメモリの当該ブレークポイントの次のアドレスに命令の実行を移行させるためのジャンプ命令を書き込むランダムアクセス可能な記憶手段と、
前記ブレークポイントにおいてプログラムの実行が停止した後のプログラムの再実行時に前記記憶手段の前記第１のアドレスをプログラムカウンタに設定してプログラムを再実行させるプロセッサと、
を備えていることを特徴とするデバッグシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、フラッシュメモリに書き込まれたソフトウェアのデバッグ方法及びデバッグシステム、特に、ソフトウェアにブレークポイントを設定してデバッグする場合に、フラッシュメモリの書き換え回数を削減することが可能なデバッグ方法及びデバッグシステムに関する。
【背景技術】
【０００２】
【特許文献１】特開２００２−８２８１９号公報
【特許文献２】特開２００１−２６５６２１号公報
【０００３】
デバッガは、通常、プログラムメモリ上の命令コードをブレークポイント命令コード等に置き換えることにより、このブレークポイントにおいて、ソフトウェアの実行を一時中断させ、そのときの、各種変数、レジスタの値などを調べることにより、プログラムのデバッグを行うことが出来るように構成されている。
【０００４】
ＲＯＭ等に書き込まれたプログラムを上記方法でデバッグする場合は、命令コードを置き換えるため、一旦、ＲＡＭなどの書き換え可能なメモリに当該プログラムをコピーし、ブレークポイント命令等を追加し、若しくは一部の命令を書き換える事により、ブレーク機能を実現している。
【０００５】
例えば、上記特許文献１では、ブレークポイントを含む任意に指定された範囲のプログラムをフラッシュメモリからＲＡＭにコピーし、ブレークポイントに於ける命令をＲＡＭ上で、ブレークポイント命令コードに書き換えることにより、設定したブレークポイントにおいてプログラムを停止させることが出来るようにしている。
【０００６】
この方法では、設定するブレークポイントが少数で、その分布範囲が限られているような場合は問題が生じないが、多数のブレークポイントをフラッシュメモリの広範囲にわたって設定する必要がある場合に、対象とする領域をＲＡＭにコピーするには、フラッシュメモリの容量に匹敵するような大容量のメモリが必要となるため、小規模ＬＳＩに対してこのようなデバッグ方法を採用することが困難となる。
【０００７】
また、上記特許文献２では、フラッシュメモリのプログラムをデバッグする場合に、デバッガを起動するポイントとなるべき命令を包含するセクタをＲＡＭ上に複写してプログラム制御変更命令を書き換え、メンテナンス手段を用いてフラッシュメモリに書き込むことによりフラッシュＲＯＭ領域にソフトウェアブレークポイントが設定されたように動作させており、ブレークポイント設定の度にセクタ単位でフラッシュメモリを書き換えている。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
前記、特許文献２に係る方法では、プログラムを再実行させるためには、ブレークポイント命令コードを書き込んだアドレスの本来の命令コードを実行させなければならない。このため、デバッガは、ソフトウェアブレークポイント命令コードを書き込む前に、フラッシュメモリ上の命令コードを読み出してＰＣ上他の記憶装置（例えばＲＡＭ）に保存しておき、プログラムを再実行する時には、ＲＡＭに保存しておいた本来のプログラム命令コードを一度フラッシュメモリに書き戻して、１ステップ実行させた後、再び、同一のアドレスでブレークさせるために、ブレークポイント命令コードを書き戻すといった操作が必要となる。
【０００９】
つまり、前記特許文献２に記載された方法では、プログラムを再実行するときに、本来の命令コードの書き込みと、再度ブレークポイント命令コードを書き戻すことの２回のフラッシュメモリへの消去と書き込みを行わなければならず、その場合幾つかの命令を組み合わせて実行する必要がある。このため、書き換えには多大な時間が必要となる。一般的なフラッシュメモリは、書き換え回数に制限（各メーカのフラッシュメモリは１００００回程度が限度）があるため、プログラムがブレークした後の再実行で、２回のフラッシュメモリ書き換えが発生することは、フラッシュメモリの劣化を早めるという問題がある。
【００１０】
この発明の課題は、プログラムの再実行時のフラッシュメモリへの書き換え操作を無くして再実行に要する時間を短縮すると共に、書き換え回数を低減させてフラッシュメモリの劣化を防止することにある。
【課題を解決するための手段】
【００１１】
本発明に係るフラッシュメモリ上のプログラムデバッグ方法は、ユーザが指定したフラッシュメモリ上の少なくとも一つのブレークポイントの命令コードを取り出して退避させると共に当該ブレークポイントの命令をプログラムを停止させる命令コードに書き換えるステップと、ユーザからの指示によりプログラムの実行を開始し、最初に上記ブレークポイントに到達した時にＲＡＭ上の所定の第一アドレスに前記退避させた命令を書き込むと共に、前記第一アドレスの次のアドレスにフラッシュメモリ上の当該ブレークポイントの次の命令にジャンプさせる命令を書き込むステップと、プログラムカウンタの値を前記ＲＡＭの前記第一のアドレスに設定してプログラムを再実行させるステップと、前記ブレークポイントに第二回目以降到達した場合のプログラムの再実行に於いては、プログラムカウンタの値を前記ＲＡＭの前記第一のアドレスに設定することによりプログラムの実行を開始させるステップとを含むことを特徴とする
【発明の効果】
【００１２】
本発明に係るフラッシュメモリ上のプログラムデバッグ方法では、フラッシュメモリ上に設定される少なくとも一つのブレークポイントの命令コードを予め退避させておき、フラッシュメモリ上のプログラムを実行させて、最初にブレークポイントに到達した際には、ＲＡＭ上の所定の第一アドレスに前記退避させた命令を書き込むと共に第一アドレスの次のアドレスにフラッシュメモリ上の当該ブレークポイントの次の命令にジャンプさせる命令を書き込む処理を行い、二回目移行に当該ブレークポイントに到達した場合は前記退避させた命令の書き込み処理及びジャンプ命令の書き込み処理を省略して、プログラムカウンタの値を前記第一アドレス値に設定させてプログラムの実行を再開させるようにしたので、フラッシュメモリの内容の書き換えは、デバッグ実行開始時とデバッグ終了時のみで良く、フラッシュメモリの書き換えに起因する劣化防止に寄与するとともに、書き込みに必要となる時間を短縮することが可能となる為、プログラムの再実行までの時間を短縮することが可能となる。
【発明を実施するための最良の形態】
【００１３】
以下、この発明の実施の形態について、図面を参照して詳細に説明する。尚、各図面はこの発明が理解できる程度に概略的に示している。
【００１４】
図１は、本発明によるフラッシュメモリ上のプログラムデバッグ方法を実装するシステムの概略構成を示すブロック図であり、ホストコンピュータ１１，ターゲットボード１２，ユーザインターフェース１３を備えている。ターゲットボード１２は、プログラムカウンタ（ＰＣ）１７を内蔵するＣＰＵ（１４）、及びフラッシュメモリ１８，ＲＡＭ１６から成るメモリ１５を備えている。
【００１５】
ユーザインターフェース１３は、ホストコンピュータ１１上で動作するデバッガ１１ａを利用する。デバッガ１１ａは、ターゲットボード１２内のフラッシュメモリ１５への書き込みと、実行を開始するプログラムカウンタ（ＰＣ）１７の書き換え、及びプログラムの実行を指示する機能を有する。
【００１６】
ターゲットボード１２は、ＣＰＵ（１４）、メモリ１５を備えており、メモリ１５は、フラッシュメモリ１８とＲＡＭ１６で構成されている。ＣＰＵ（１４）は、ホストコンピュータ１１上のデバッガ１１ａからの指示に従って動作し、ＣＰＵ（１４）には、メモリ１５上のプログラムの実行を制御する機能とメモリの参照／変更機能を有している。
【００１７】
フラッシュメモリ１８上のプログラムの実行は、ＣＰＵ（１４）によって行われる。ＣＰＵ（１４）は、フラッシュメモリ１８上の命令コードを実行中に、ソフトウェアブレークポイント（ブレークポイント命令コード）を実行すると、プログラムの実行を停止する。
【００１８】
この実施形態では、ＲＡＭ１６は、プログラムを実行する為のユーザワーク領域１６ａと、ブレークポイントにおける本来の命令コードを格納する領域１６ｂ、ブレークポイントの次のアドレスへのジャンプ命令を格納する領域１６ｃとから構成されており、ブレークポイント命令コードに書き換えられている本来の命令コード（領域１６ｂ）を、フラッシュメモリへの書き込みをすることなく、ＲＡＭ上で実行させることによって実現するようにしている。
【００１９】
プログラムの実行を再開するときは、本来の命令コードを書き込んだＲＡＭのアドレスをＰＣ（１７）に設定し、プログラムの実行を指示することにより実現する。これにより、本来の命令コードがＲＡＭ上で実行され、次のアドレスに書き込まれているジャンプ命令で、フラッシュメモリ１８に設定されているブレークポイントの次のアドレスにジャンプさせる。
【００２０】
図２は、この発明によるフラッシュメモリ上のプログラムデバッグ方法の実施形態に係るフローチャートであり、以下、図２を参照してデバッグ方法を詳細に説明する。
【００２１】
デバッガ１１ａは、ユーザからブレークポイントの設定要求を受けると（Ｄ１）、ＣＰＵ（１４）にブレークポイントのアドレス（例えば０ｘ１０００：このブレークポイントはユーザインターフェース１３を介してユーザにより設定される）の命令コードを取り出すように指示する（Ｄ２）。
【００２２】
ＣＰＵ（１４）は、初期状態で、リセット状態（ＰＣ＝０ｘ０）にある（Ｃ１）が、デバッガ１１ａからの要求に従って、ブレークポイントを設定するアドレスのデータを取り出してデバッガに通知する（Ｃ２）。
【００２３】
デバッガ１１ａは、ＣＰＵ（１４）から受け取った命令コードをホストコンピュータ１１上の図示しない記憶媒体に保存する（Ｄ３）。
【００２４】
デバッガ１１ａは、ＣＰＵ（１４）にブレークポイント命令コードをフラッシュメモリのブレークポイントのアドレス（例えば０ｘ１０００）に書き込むように指示し（Ｄ４）、ＣＰＵ（１４）は、ブレークポイント命令コードを指定アドレス（０ｘ１０００）に書き込み（本来の命令はステップ（Ｄ３）で保存されている）（Ｃ３）、デバッガ１１ａからの次の要求待ち状態となる。
【００２５】
デバッガ１１ａは、ユーザインターフェース１３を介してユーザから実行要求を受けると（Ｄ５）、ＣＰＵ（１４）に実行を開始するように指示し（Ｄ６）、ＣＰＵ（１４）はプログラムの実行を開始する（Ｃ４）。
【００２６】
ＣＰＵ（１４）は、ブレークポイントの命令を実行すると、プログラムの実行を停止し、デバッガにブレークしたことを通知すし（Ｃ５）、デバッガ１１ａは、ブレークを受領したことをホストコンピュータ上の画面に表示し、ユーザに知らせる（Ｄ７）。
【００２７】
デバッガ１１ａは、ユーザから再実行要求を受領すると（Ｄ８）、図示しない記憶媒体から、ブレークポイントの本来の命令コードを取り出し、ＣＰＵ（１４）に対してＲＡＭの領域１６ｂに本来の命令コードをセットし、その次のＲＡＭアドレスに、フラッシュメモリのブレークポイントが設定されている次の命令にジャンプさせるジャンプ命令をセットするように指示する（Ｄ９）。
【００２８】
ＣＰＵ（１４）は、ＲＡＭの領域１６ｂに本来の命令コードをセットし（Ｃ６）、フラッシュメモリのブレークポイント命令コードが設定されている次の命令コードにジャンプさせるジャンプ命令を領域１６ｃにセットする（Ｃ７）。
【００２９】
デバッガ１１ａは、ＣＰＵ（１４）に再実行時のＲＡＭの実行開始アドレス（例えば０ｘ１００XXXX）をＰＣにセットするように要求し、（Ｄ１０）、ＣＰＵ（１４）は、ＰＣに再実行時のＲＡＭの実行開始アドレスをセットする（Ｃ８）。
【００３０】
デバッガ１１ａは、ＣＰＵ（１４）にプログラムの実行を開始するように指示し（Ｄ１１）、ＣＰＵは、（Ｃ８）でセットしたＰＣアドレスからプログラムの実行を再開する（Ｃ９）。
【００３１】
この手順により、本来の命令コードがＲＡＭ１６上で実行された後、（Ｃ７）でセットされたジャンプ命令によって、フラッシュメモリのブレークポイントの次のアドレスの命令に実行が移され、プログラムの処理が続行される。この場合、次に、前記ブレークポイントに於ける命令が実行された後、プログラムが再実行されると、ＲＡＭ上の領域１６ｂに格納された本来のブレークポイントにおける命令が実行され、次のジャンプ命令によりブレークポイントの次のアドレスに制御が移動し、以下同様の処理が行われる。
【００３２】
尚、本実施形態では、ブレークポイントが１個の場合について説明したが、複数個のブレークポイントが設定された場合も前記と同様の処理が実行される。
【００３３】
以上説明したように、本発明の方法を用いることによって、再実行時にフラッシュメモリの書き換えをする必要が無くなり、再実行時間を短縮することが可能となる。また、フラッシュメモリの劣化を低減させることが可能となる。即ち、この実施形態によれば、次のような効果がある。
【００３４】
（ａ）フラッシュメモリへの消去／書き込みには、コマンドシーケンスを実行する必要があるが、ＲＡＭへの書き込みは、１アドレスの上書きが可能なため、プログラムの実行再開までの時間を短縮することが可能となる。
【００３５】
（ｂ）フラッシュメモリは、ＲＡＭに比べて書き換え回数に制限（各メーカのフラッシュメモリは１００００回程度が限度）があるが、プログラムの再実行時のフラッシュメモリの書き換え回数を低減することが可能となる。
【００３６】
本実施形態では、デバッガの機能をＲＡＭから実行する場合について、例示したが、本発明は、この方法に限られるものではなく、以下の（ア）〜（ウ）の方法を用いることも可能である。
【００３７】
（ア）ＲＡＭとフラッシュメモリを切り替える機能をターゲットボード上のハードウェアに装備し、デバッガからハードウェアを指示することによって、フラッシュメモリとＲＡＭを切り替えるようにすることが可能である。
【００３８】
（イ）ターゲットボードとデバッガの間にインサーキットエミュレータを置く場合には、本来のコードを退避する装置をインサーキットエミュレータに置くこともできる。
【００３９】
（ウ）前述のように、ターゲットボードとデバッガの間にインサーキットエミュレータを置く場合には、ＲＡＭとフラッシュメモリを切り替える機能をインサーキットエミュレータ上に装備し、デバッガからインサーキットエミュレータに指示を出し、ＲＡＭとフラッシュメモリを切り替えるようにすることも可能である。  
【図面の簡単な説明】
【００４０】
【図１】本発明によるフラッシュメモリ上のプログラムデバッグ方法を実装するシステムの概略構成を示すブロック図である。
【図２】この発明によるフラッシュメモリ上のプログラムデバッグ方法の実施形態に係るフローチャートである。
【符号の説明】
【００４１】
１０    本発明の方法を実装するシステム
１１    ホストコンピュータ
１２    ターゲットボード
１３    ユーザインターフェース
１４    ＣＰＵ
１５    メモリ
１６    ＲＡＭ
１７    プログラムカウンタ（ＰＣ）
１８    フラッシュメモリ
【図１】
2006268472.tif 000003
【図２】
2006268472.tif 000004