2.9.1.4 プログラム実行中にメモリの内容を表示/変更する

メモリ パネルウォッチ パネルでは,プログラムの実行中に,リアルタイムにメモリ/ウォッチ式の内容を表示更新,および書き換えることができるリアルタイム表示更新機能を備えています。

このリアルタイム表示更新機能を有効化することにより,プログラムが停止している状態だけでなく,実行中の状態であっても,メモリ/ウォッチ式の値の表示/変更を行うことができます。

なお,リアルタイム表示更新機能は,デバッグ・ツールが持つRRM機能(読み込み)【IECUBE】【シミュレータ】RAMモニタ機能(読み込み)(【シミュレータ】以外)DMM機能(書き込み)により実現され,各機能ごとに読み込み/書き込みが可能な対象領域は異なります。

 

まず,リアルタイム表示更新機能を有効にするために,プロパティ パネル[デバッグ・ツール設定]タブ上において,次の基本設定を行ってください。

表 2.7

リアルタイム表示更新機能の基本設定

カテゴリ

プロパティ

設定値

[実行中のメモリ・アクセス]

[実行中に表示更新を行う]

[はい](デフォルト)

[表示更新間隔[ms]]

100 〜65500の整数

注意

ローカル変数は,リアルタイム表示更新機能の対象外です。

備考

メモリ パネルウォッチ パネルにおける値の書き換え方法についての詳細は,「2.9.1.3 メモリの内容を変更する」/「2.9.6.6 ウォッチ式の内容を変更する」を参照してください。

(1)

RRM機能(読み込み)【IECUBE】【シミュレータ】

プログラム実行中に,リアルタイムにメモリ/ウォッチ式の内容を読み込む機能です。

RRM機能による読み込みが可能な領域は次のとおりです。

この領域に割り当てられているメモリ/ウォッチ式は,常にリアルタイムな表示が可能です。

表 2.8

RRM機能の対象領域

対象領域

IECUBE

シミュレータ

内部ROM

注1

内部RAM(レジスタ領域を除く)

データフラッシュ

エミュレーション・メモリ

ターゲット・メモリ

CPUレジスタ

注2

注3

SFR

注3

注 1.

実行前のキャッシュ・データのため,リアルタイムな値ではない

注 2.

汎用レジスタ/PCのみ可

注 3.

トレーサ/タイマ動作中は不可

(2)

RAMモニタ機能(読み込み)(【シミュレータ】以外)

プログラムの実行を一瞬停止して,ソフトウエア・エミュレーションによりメモリ/ウォッチ式の内容を読み込む機能です。

RAMモニタ機能による読み込みが可能な領域は次のとおりです。

注意

CPUステータスがスタンバイ・モード(HALT/STOP)に移行すると,タイムアウト・エラーを発生します。

表 2.9

RAMモニタ機能の対象領域

領域名

IECUBE

E1/E20/EZ Emulator

内部ROM

注1

内部RAM(レジスタ領域を除く)

注1

データフラッシュ

注1

エミュレーション・メモリ

ターゲット・メモリ

CPUレジスタ

注2

SFR

注3

注 1.

RRM機能が有効な場合はRRM機能を優先(RAMモニタ機能は使用しない)

注 2.

バンク指定の汎用レジスタのみ可

注 3.

BCDADJは不可

 

ただし,RAMモニタ機能を有効にするためには,リアルタイム表示更新機能の基本設定に加え,次の設定が必要となります。

カテゴリ

プロパティ

設定値

[実行中のメモリ・アクセス]

[実行を一瞬停止してアクセスする]

[はい]

(3)

DMM機能(書き込み)

プログラム実行中にリアルタイムにメモリ/ウォッチ式に値を書き込む機能です。

DMM機能による書き込みが可能な領域は次のとおりです。

注意

CPUステータスがスタンバイ・モード(HALT/STOP)に移行すると,タイムアウト・エラーを発生します。

表 2.10

DMM機能の対象領域

領域名

IECUBE

E1/E20/EZ Emulator

シミュレータ

内部ROM

内部RAM(レジスタ領域を除く)

エミュレーション・メモリ

ターゲット・メモリ

CPUレジスタ

注1

注2

SFR

注3

注2

●: 実行を一瞬停止して可能

○: 実行を一瞬停止せずに可能

注 1.

バンク指定の汎用レジスタのみ可

注 2.

トレーサ/タイマ動作中は不可

注 3.

標準SFRのみ可

 

ただし,DMM機能を有効にするためには,リアルタイム表示更新機能の基本設定に加え,次の設定が必要となります。

デバッグ・ツール

プロパティ

設定値

シミュレータ

設定不要

上記以外

[実行中のメモリ・アクセス]カテゴリ
→[実行を一瞬停止してアクセスする]

[はい]

注意

RRM機能やRAMモニタ機能で値を読み出す変数のサイズが複数バイト(2バイト/4バイト/8バイト)の場合,変数へ値を代入する処理が2回に分けて行われる場合があります。
この2回の代入処理の間で変数の読み出しが行われると,変数へ値が代入される途中の値が読み出され,実際には代入していない値が表示されることがあるため注意が必要です。

【例】

次の例では,“命令1”実行完了後から,“命令2”実行完了前に読み出しがあった場合,下位2バイトのみ代入が完了した変数“value_a”の値を読み出します。

【C言語ソース】

long int    value_a = 0;    // 4バイト変数定義
 
void func(void)
{
    value_a = 4000000000;   // 4バイト変数への代入
}

【上記代入処理のアセンブラ命令】

MOVW    AX, #2800H
MOVW    !_value_a, AX       ;命令1:変数“value_a”の下位2バイトを代入
MOVW    AX, #0EE6BH
MOVW    !_value_a+2, AX     ;命令2:変数“value_a”の上位2バイトを代入

 

なお,メモリ パネルウォッチ パネルでは,リアルタイム表示更新機能を行っているメモリ値/ウォッチ式がピンク色に強調表示されます。

図 2.88

リアルタイム表示更新を行っているメモリ表示の例(メモリ パネル)

 

さらに,IECUBEを使用している場合のメモリ パネルでは,RRM機能によるリアルタイム表示更新を行っているメモリ値の背景色が,アクセス状態に従って次のように変化します(表示の際の文字色/背景色は,オプション ダイアログにおける[全般 - フォントと色]カテゴリの設定に依存します)。

アクセス状態

表示例

リード

 

ライト

 

リードとライト

 

図 2.89

RRM機能によるリアルタイム表示更新を行っているメモリ表示の例(メモリ パネル)【IECUBE】