シミュレーション実行中に下記のエラーが発生して、シミュレーションが停止します。エラーの発生原因を教えてください。
Invalid address found [code = 18] (pc=XXXXXXXX)
%SYSTEMG-E-SEM, stopped simulation (status code = 12h)
`MEM::XXXXXXXX'
よくある質問(FAQ)
シミュレーション実行中に下記のエラーが発生して、シミュレーションが停止します。エラーの発生原因を教えてください。
Invalid address found [code = 18] (pc=XXXXXXXX)
%SYSTEMG-E-SEM, stopped simulation (status code = 12h)
`MEM::XXXXXXXX'
本エラーは、変数へ割り付けられたアドレスが境界違反のとき発生します。(アドレスの境界制限の無いマイコンの場合は発生しません)
また、書き込み禁止領域 (アドレス空間)へ書き込みを行ったとき発生します。
発生原因としては2つのケースが考えられます
例1)「char」型の変数のアドレスを「long」型のポインタにキャストして代入したとき
char a[4];
long *p;
p = (long *)&a[1];
*p = 1; // ★エラー発生
※ポインタ変数”p”には、"a[1]"のアドレス(奇数アドレス)が入ります。
(ポインタ変数"p"は「long」型のため、ポインタのアドレスは4バイト境界でないと、本エラーが発生します)
例2) 定数「const宣言」へ ポインタを介して代入したとき
const long a;
long *p;
p = (long *)&a;
*p = 1; // ★エラー発生