質問: hewのビルドで出てきたビルドエラーについて 現在h8s/2368マイコンのプログラミングをやっています。 プログラム修正を行っていて、ビルドを行ったところ、次のようなビルドエラーがhewから出てきました。 (エラー内容) ** l2321 (e) section "s" overlaps section "r" optimizing linkage editor abort error: process failed with return code: 1 このエラーのため実行バイナリファイルが作成できません。 debugフォルダに作られるmapファイルを見たところ -----(中略)------------------------------------ $vect118 000001d8 000001db 4 0 presetprg 00000400 0000041f 20 2 pintprg 00000420 000004ab 8c 2 p 00000800 00060af7 602f8 2 c 00060af8 00066de1 62ea 2 c$dsec 00066de2 00066ded c 2 c$bsec 00066dee 00066df5 8 2 d 00066df6 0006789b aa6 2 bheapmem 00600000 0066fdff 6fe00 2 bjurnel 00670000 00670007 8 2 bprogerase 00ff4000 00ff43ff 400 2 b 00ff4400 00ffb365 6f66 2 r 00ffb366 00ffbe0b aa6 2 s 00ffbe00 00ffbfff 200 2 *** total section size *** ramdata section: 00077e14 byte(s) romdata section: 00006ed8 byte(s) program section: 000603a4 byte(s) 確かに、rセクションの終了アドレス 0x00ffbe0b が sセクションの開始アドレス 0x00ffbe00 を超えてしまっているようなのですが、これはなぜなのでしょうか? この現象はプログラム容量がもうフルの状態を表していると言うことでしょうか? また、疑問なのですが、”program section: 000603a4 byte(s)”と表示は現在のプログラム容量の値ということでしょうか? 現在このマイコンを下のサイトで調べてみると http://japan.renesas.com/products/mpumcu/h8s/h8s2300/h8s2368/index.jsp 型番はhd64f2368vte34vを使用しているのですが、それならばプログラムメモリは512kbyteあり、現在、394.148kbyteしか使っていないので、まだ余裕があると思うのですが、解決する方法はないのかご教示頂きますようお願い致します。
回答: あー、嘘を書いてしまった・・・ h8s/2368の内蔵ramは、0xff4000~0xffbfffの32kbですね。 なので、s領域先頭アドレスは0xffbfffとなります。 仮にs領域最終アドレスを0xffbe0c(r領域の最終アドレス0xffbe0b+1)に設定すると、スタックサイズは0x1f5(501byte)と非常に小さくなってしまいます。 このスタックサイズでプログラムが正常に動作するか?が問題ですね。 ローカル変数で大きな配列等を使用していたらアウトです。 ちなみにソースstacksct.h中の#pragma stacksizeの数値はいくつになっていますか? (開発言語はc言語ですよね?)