よくある質問(FAQ)

【RH850】シミュレーション実行の結果、対象関数内で変数の値が不正になります。

シミュレーションエラーの回避策について

質問

【RH850 固有】
シミュレーション実行の結果、変数の値が正しく設定されない状況が発生しています。考えられる原因を教えてください。

回答

下記、RH850レジスタに正しいアドレスが設定されていない可能性があります。
GP - Global Pointer
TP - Text Pointer
EP - Elementary Pointer


RH850では、GP/TP/EPレジスタ相対のメモリアクセス命令が多用されます。これらのレジスタ値は通常テスト対象のスタートアップ処理の中で値が設定されます。 カバレッジマスターwinAMS のスタートアップコマンドファイル (SS_STARTUP.txt) で「set reg PC = ...」と設定し、テスト対象のスタートアップ処理の実行をスキップしている場合、 これらに適切な値が入らな いままシミュレーション実行されます。

この場合、スタートアップコマンドファイル (SS_STARTUP.txt) に「set reg GP = ...」等と記述して値を設定することによって問題回避できます。 ここで設定すべき値は、ビルド時に生成される「リンクマップファイル」から調べることができます。

■ GreenHills社 コンパイラの事例
.sda_start  00402498+000000 __gp
.rosda_start 00401c78+000000 __tp
.tdata    ffff8000+000000  __ep

下記のコマンドで「__gp」「__tp」「__ep」のアドレスを、スタートアップコマンドファイル (SS_STARTUP.txt) に設定してください。

■ スタートアップコマンドファイル (SS_STARTUP,txt)への設定 例
set reg GP = 0x402498
set reg TP = 0x401c78
set reg EP = 0xffff8000