よくある質問(FAQ)

【ARM Cortex / armclang】「OVERLAY構造」のプログラムでシミュレーションエラーが発生しました。

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

質問

【ARM Cortex / armclang 固有】
セクション(AAAA)とセクション(BBBB)のアドレスが重複している(OVERLAY構造)プログラムを シミュレーション実行したところ、「 %XTPC-E, Not Assign address…」エラーが発生しました。原因と解決方法を教えてください。

■エラー内容
%XTPC-E, Not Assign address specification (addr=0xXXXXXXXX)
 又は
%SX-E-TARGET, memory is not assigned at MEM::XXXXXXXX in process "hsnXXXX"

回答

セクション (AAAA) のプログラムコードがセクション (BBBB) のプログラムコードにより上書きされるため、関数が正しく動作しないことで 本エラーが発生しています。
★注意
上書きされたプログラム動作によってエラーの発生状況は変わります。常に「Not Assign address specification…」エラーが発生するとは限りません。

※制限事項について
カバレッジマスターをご利用いただく上でリンカの設定に制限事項があります。リンク時に使用するスキャッタファイル記述について、下記 属性については使用する事ができません。
・OVERLAY
・AUTO_OVERLAY
・PI
・RELOC

詳しくは【MPU制限一覧(SX).pdf】の「16.1.4.7 スキャッターファイルの制限」をご覧ください。

■回避策
上記 記述 (制限となる属性) を使用しない設定で、実行オブジェクトを作成する必要があります。下記の例「スキャッタファイル記述」を参考にしてください。

【例: 変更前のスキャッタファイル】
・「OVERLAY」記述あり
・ AAAA/BBBBセクションアドレス(0x1000)が重複

AAAA 0x1000 OVERLAY ; start address of overlay...
{
module1.o(+RW,+ZI)
}
BBBB 0x1000 OVERLAY ; start address of overlay...
{
module2.o(+RW,+ZI)
}

【例: 変更後のスキャッタファイル】
・「OVERLAY」記述なし
・ AAAA/BBBBセクションアドレスを重複しないアドレスへ変更

AAAA 0x1000
{
module1.o(+RW,+ZI)
}
BBBB 0x2000
{
module2.o(+RW,+ZI)
}