カスタマーサポートセンター

FAQ~よくある質問~ | FAQマスタ詳細表示

FAQ詳細情報

ID 10810686
FAQカテゴリ(大) C-SPYデバッガ
最終更新日 2016-02-20

質問内容

TN24166: メモリとレジスタをセーブ/リストアする C-SPYマクロ

回答内容

ターゲット:すべて
コンポーネント:デバッガ
公開日:2012年6月20日午前13時55分

 

概要
デバッグの効率を上げるため、ターゲットのメモリとレジスタの値をセーブ/リストアする必要がある場合、このテクニカルノートは有効です。この例は6812用ですが、適当な改造を行うことにより、他のデバイスでも動作させることができます。

このサンプルマクロファイルは、レジスタやメモリ領域を簡単なヘキサファイルにセーブする方法を示しています。このファイルの名前は c:\test.hex ですが、好きな名前に変えてもかまいません。セーブするファイル名と、リストアするファイル名が同じになるようにします。便利に使用できるように、このファイルを、プロジェクトメニュー > オプション > デバッガ > 設定タブ > セットアップマクロに設定しておくと、C-SPYを起動するたびに読み込まれます。これで、このマクロを、 Control -> Quick Watch ダイヤログ、save() と push、return または Recalculate をクリックすることで起動することができます。 Add Watch を使用したくないかも知れません。なぜなら、Watch が更新されるたびにマクロが実行されるからです。

分かりやすくするために、このファイルの最初で、いくつかの変数を定義しています。 (Quick Watch ダイヤログで、アクセスできます) もっとも重要な変数は mem_begin と mem_end で、セーブしたりリストアしたりする範囲を示しています。 セーブ/リストアする範囲を複数に拡張することは簡単です。

これで、メモリーセーブ関数ができました。
• 書き込み用 (C:\test.hex) ファイルを開きます。
• レジスタの値をファイルにセーブし、 値をレポートウィンドウに表示します。
• mem_begin と mem_end をファイルにセーブします。
• mem_begin から mem_end までのメモリの内容をセーブします。
以下の行から始まるいくつかの行が、コメントアウトされています。

// Optional register:

れは、必要に応じて PP レジスタをセーブ/リストアするためです。(e.g., バンクが使用される). メモリーリード関数は、メモリーセーブ関数と基本的に反対の動作をするので、簡単です。

最後の execUserSetup() は、mem_begin と mem_end の値を定義しています。もしこの名前のマクロがあると、ターゲットプログラムがダウンロードされた直後に一度呼ばれます。詳細は、C-SPY のドキュメントを参照してください。

 

追加のマクロ
この追加マクロは、ファイル名を指定することができ、マクロのソースアップデートする必要がありません。

QuickWatchのコマンドラインに入れる、変数の内容をバイナリフォーマットでダンプするコマンドの例。

DumpMem(dumpmem.bin, &trace_buffer, sizeof(trace_buffer))

QuickWatchのコマンドラインに入れる、ARMのレジスタの内容を「読めるフォーマット」でダンプするコマンドの例。

DumpReg(dumpreg.txt)

 

DumpReg について
もしinitのサイズが、大使をうとすめアドレスに比べて小さすぎる場合は、 (int) ではなく (long) にキャストしてください。


全ての製品の名前は、それぞれの所有者の商標または登録商標です。

参考資料URL