よくある質問(FAQ)

シミュレーション実行中に「memory is not assigned on the address」エラーが発生しました。

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

質問

シミュレーション実行中に「memory is not assigned on the address」エラーが発生し、シミュレーションが停止します。エラーの発生原因を教えてください。

例1)
Invalid address found [code = 18] (pc=********)
%SYSTEMG-E-SEM, stopped simulation (status code = 12h)
`MEM::********'

例2)
%SYSTEMG-E-SEM, memory is not assigned on the address
`MEM::******'

回答

直接的にはシミュレーション中に「アサイン」されていないメモリ領域へのアクセスが発生したことを示しています。その要因としては2つの可能性があります。

・ 本来アクセスすべき(正しい)メモリ領域がアサインされていない
・ プログラムが暴走して想定外のメモリ領域に対するアクセスが発生した

■ 本来アクセスすべき(正しい)メモリ領域がアサインされていない

プログラムの中で「領域定義した変数」及び「定数やプログラム領域」の属性は、オブジェクトコードの「デバッグ情報」にあるメモリマップ情報を基に自動的にアサインされます。そのため、これらの領域をアクセスしている限りは、上記のメモリアサインエラーが発生することはありません。

エラーの発生する主な原因は、プログラムで定義していない領域 (スタック領域、I/O レジスタ等) へのアクセスでエラーが発生するケースです。
このエラーが発生する場合は、スタートアップコマンドファイルに記述するシミュレータマクロを使用して、H/W仕様に合わせたメモリ属性を正しく「アサイン」するか、「起動設定」画面の「全てのメモリ領域をアサイン」(全領域がread/write/exec属性になります)をONにする事で回避できます。

詳細は「メモリアサインエラーの対処方法v2.0.pdf」をご覧ください。 閲覧はこちら

■ プログラムが暴走して想定外のメモリ領域に対するアクセスが発生した