ホーム > ユーザーサポート > FAQ カバレッジマスターwinAMS

FAQ / カバレッジマスターwinAMS

スタブ作成に関する問題

A03_04 : カバレッジマスターゼネラルでスタックオーバーフローした場合、スタック領域を拡張するにはどうすれば良いですか?

【質問】
カバレッジマスターゼネラルを使用していますが、下記の様なエラーメッセージが表示されました。

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

ステップ実行して、実行状態を調査していると、ある箇所でスタック領域(0x00100000〜0x00110003)の上限よりも上のアドレスまでスタックを使用してオーバーフローしている事が分かりました。カバレッジマスターゼネラルで、スタック領域を拡張するにはどうすれば良いですか?


【回答】
スタートアップコマンドファイルで、スタックエリアを拡張する事が可能です。スタートアップコマンドファイルに下記の記述を追加して下さい。拡張したスタック領域を「ポインタ割り当て設定」で使用している場合は、「ポインタ割り当て設定」のエリアを重複しないアドレスに変更してください。

例)スタックエリアを64Kから128Kに拡張する場合、スタートアップコマンドファイルに下記の記述を追加します。

; SPの拡大
assign 0x100000#0x20000 ; スタックエリアを拡大(拡張する領域で変更)
macro set_sp
set reg sp=0x11fff0 ; スタックポインタの初期値を設定(拡張する領域で変更)
mend

set do/exe = 0x40000058 set_sp

上記のスタック領域拡大後のメモリマップは、下記の様になります。

0x00100000〜0x0011fff3 スタック
0x0011fff4〜0x00FFFFFF 空き(カバレッジマスターのポインタ割り当てエリアとして利用可能)
0x01000000〜0x3FFFFFFF 変数領域(デフォルトのsbrkでは、ヒープはここ)
0x40000000〜0xFFFFFFFF プログラム領域

ゼネラルに内蔵されているテスト実行シミュレータ(汎用マイコンシミュレータ)のデフォルトのメモリマップは下記を参照して下さい。

 

関連サポート情報検索

【サポート情報サイト内Google検索】

検索キーワード: ゼネラルスタックオーバーフロー

他のキーワード検索

 

参考情報・リンク