Skip to main content

IAR Embedded Workbench for Arm 9.70.x

メモリとレジスタのモニタの概要

このセクションの内容:

メモリとレジスタのモニタの概要について

C-SPY には、メモリとレジスタをモニタするウィンドウが多数あり、それらは個々に[表示]メニューから表示できます。

  • [メモリ]ウィンドウ

    指定メモリエリアであるメモリゾーンの最新状態を表示して、編集できます。アプリケーションの実行とともにデータカバレッジは、異なる色でハイライトされます。指定エリアに特定の値を設定して、メモリ位置と範囲に直接ブレークポイントを設定できます。このウィンドウで数個のインスタンスを開き、様々なメモリエリアをモニタできます。ウィドウの内容は、アプリケーションの実行中に定期的に更新されます。

  • [シンボルメモリ]ウィンドウ

    静的記憶寿命変数がメモリ内でどのように配置されるかを表示します。これにより、メモリの使用が理解し易くなり、バッファオーバランなど上書きされた変数に起因して発生した問題の調査に役立ちます。

  • [スタック]ウィンドウ

    メモリ内でのスタック変数の配置を含むスタック内容を表示します。また、スタックの整合性チェックを実行し、スタックオーバフローを検出して警告することもできます。たとえば、[スタック]ウィンドウを使用して、スタックの最適サイズを特定できます。このウィンドウのインスタンスを最高2つ開いて、それぞれに異なるスタックを表示したり、同じスタックを異なる表示モードで表示したりできます。

  • [レジスタ]ウィンドウ

    プロセッサレジスタとSFRの内容の最新状態を表示し、それを編集できます。固定グループのCPUレジスタを除いて、追加のレジスタはデバイス記述ファイルで定義します。これらのレジスタとてしては、Armデバイスのペリフェラルに対する、メモリにマッピングされたデバイス固有の制御レジスタとステータスレジスタがあります。レジスタは、メモリにマッピングされたペリフェラルユニットレジスタやCPUレジスタなどが多数存在するため、[レジスタ]ウィンドウに同時にすべてのレジスタを表示するのは不便です。その場合は、レジスタをアプリケーション指定グループに分割する方法があります。定義済みのレジスタグループをロードするか、独自のグループを定義することもできます。このウィンドウのインスタンスを複数開いて、それぞれに異なるレジスタグループを表示することができます。

  • [SFR設定]ウィンドウ

    C-SPYが工場出荷時に定義されたSFR(デバイス記述ファイルから取得)とカスタム定義されたSFRの両方に関する情報を持つ現在定義されているSFRを表示します。必要に応じて、[SFRの編集]ダイアログボックスを使って、SFR定義をカスタマイズすることができます。

特定の変数の内容を表示するには、単純にその変数を[メモリ]ウィンドウまたはシンボル[メモリ]ウィンドウにドラッグします。変数が配置されているメモリエリアが表示されます。

警告

一部のレジスタの値を読み取ると、アプリケーションの実行時の動作に影響することがあります。たとえば、UART ステータスレジスタの値を読み取ると、保持ビットがリセットされて、受け取ったバイトを処理するはずの割り込みがない状態になることがあります。こうならないようにするには、実行中のアプリケーションをデバッグする際には、このようなレジスタを含む[レジスタ]ウィンドウを必ず閉じてください。

C-SPY メモリゾーン

C-SPY では、ゾーンは名前付きメモリエリアを表します。メモリアドレスまたはロケーションは、ゾーンとそのゾーン内のオフセット値の組合せです。Armアーキテクチャには、Armメモリ範囲全体をカバーする 1 つのゾーン、メモリのみがあります。

DefaultMemZone_01_Arm.png

メモリゾーンはさまざまなコンテキストで使用されますが、[メモリ]ウィンドウと[逆アセンブリ]ウィンドウ、C-SPY マクロで最も重要な役割を果たします。これらのウィンドウにある[ゾーン]ボックスを使用して、表示するメモリゾーンを選択します。

一般的なメモリの場合、デフォルトゾーンメモリを使用できます。しかし、正しい結果を得るには、いくつかの I/O レジスタには 8、16、32 または 64 ビットとしてのアクセスが必要な場合があります。さまざまなメモリゾーンを使用することで、[メモリ]ウィンドウなどの読込み / 書込みに使用するアクセス幅を制御することができます。ゾーン Memory を使用する場合、デバッガは最も適したアクセス幅を自動的に選択します。

注記

C-SPY I-jet ドライバの場合、アクセス幅の自動選択を[メモリ範囲の編集]ダイアログボックスで指定できます([メモリ範囲の編集]ダイアログボックス C-SPY ハードウェアデバッガドライバを参照)。

C-SPY シミュレータのメモリ構成

正しくターゲットシステムをシミュレートするには、C-SPY シミュレータにはメモリ構成に関する情報が必要です。デフォルトでは、C-SPY はデバイス記述ファイルから取得した情報に基づいて初期構成を使用します。

C-SPY シミュレータは、構成をさらに改善するための様々なメカニズムを提供します。

  • デフォルトのメモリ構成が要求されたメモリアドレスの範囲を指定してない場合、次のことをもとにメモリアドレス範囲を指定できます。

    • デバイス記述ファイルで仮定義されたゾーン

    • デバッグファイルにセクション情報があります

    • または、デバイスのfamily(オンチップのRAMの様々な量)の代わりに、ファイルでお使いの固有のデバイスのメモリアドレス範囲を指定していない場合、通常行いたい自分のメモリアドレス範囲を定義することができます。

  • 各メモリアドレス範囲には、アクセスタイプを指定できます。メモリアクセスが指定したアクセスタイプに同意しない場合、C-SPYはこれを不法なアクセスとみなし、警告します。さらに、定義されてないメモリへのアクセスは、不法なアクセスとみなされます。メモリアクセスをチェックする目的は、メモリアクセスの攻撃を認識することに役立てることです。

詳細については、C-SPYシミュレータ用 [メモリ構成] ダイアログボックスを参照してください。

C-SPY ハードウェアデバッガドライバのメモリ構成

デバッグ中にメモリを最大限効率的に処理するため、C-SPY はメモリ構成についての情報を必要とします。デフォルトでは、C-SPY はデバイス記述ファイルから取得した情報に基づいて初期構成を使用します。

メモリアドレス範囲がお使いのデバイスで利用できるメモリと一致するようにしてください。ターゲットシステムのメモリレイアウトの情報を C-SPY で提供すると、パフォーマンスと機能性の両方に役立ちます。

  • メモリのリード(およびライト)が高速になりますが(デバッグプローブがUSBポートなどを介して接続されている場合)、C-SPYで多くのデバッガウィンドウを更新しなければならないときには、足かせとなりがちです。C-SPYはメモリコンテンツをキャッシュ化し、パフォーマンスの速度を上げて、ターゲットメモリの正しい情報を提供します。

  • 特定のメモリアドレス範囲のコンテンツはデバッグセッション中は変更されないことをC-SPYに通知します。ターゲットシステムが通常読み取りを許可しない場合(実行中の時など)でも、C-SPY は読み取り可能なメモリのコピーを維持します。

    キャッシュタイプROM/Flashを指定した場合は、C-SPYはデバッグセッション中は継続としてそのメモリを取り扱うので、気を付けてください。C-SPYウィンドウを更新するときの効率が上がります。お使いのアプリケーションがランタイム中フラッシュメモリを変更する場合は、ROM/Flashキャッシュタイプを使用しないでください。

  • 指定したメモリアドレス範囲外のアクセスからC-SPYを保護することができます。これは特定のハードウェアにはとても重要になる場合があります。

与えられたプロジェクトで C-SPY ドライバを初めて起動したとき、[メモリ構成]ダイアログボックスは自動的に表示されます。ただし、デバイス記述ファイルにはっきりと正しく完全なメモリの記述が含まれている場合を除きます。別のデバイス記述ファイルを選択した場合など、メモリ構成の変更につながるプロジェクトの変更を行わない限り、その後の起動時にこのダイアログボックスは表示されません。

詳細については、C-SPY ハードウェアデバッガドライバ の[メモリ構成]ダイアログボックスを参照してください。