こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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しか使っていないので、まだ余裕があると思うのですが、解決する方法はないのかご教示頂きますようお願い致します。

投稿日時 - 2014-07-14 19:24:59

QNo.8678205

すぐに回答ほしいです

質問者が選んだベストアンサー

>以前からなのですが、このセクションというものが何なのか具体的なことがわかりません。

H8S/2368の場合、アドレス空間は0x000000~0xFFFFFFの16MBです。
このアドレス空間中、どのアドレスにどんな領域を配置するという情報がセクションです。
スタック領域以外は先頭アドレス、スタック(S領域)は最終アドレスを記述します。(スタック領域はアドレス空間最終アドレスが先頭になるので、最終アドレスを記述することになる)

例えば、P(プログラム領域)はアドレス0x800から開始します。
更にmapファイルを見るとわかる通り0x60AF7までの、サイズ0x602F8がプログラムといこと。
つまりプログラムサイズは、393976B≒385KBということになります。

尚、16MB中0x080000~0xFF4000は外部アドレス空間です。
よってセクション情報中の下記領域に何が存在するのかは、質問者さんにしかわかりません。
0x00600000 , BHEAPMEM
0x00670000 , BJURNEL

ここで問題は0x00FF4000 , BPROGERASEと同一領域にB,R領域が割り当てられています。
最終的にR(初期化データ)領域の最終アドレスは0xFFBE0B(mapファイルより)なので、S(スタック)領域の最終アドレス0xFFBE00とオーバーラップしてしまっています。

その結果、
** L2321 (E) Section "S" overlaps section "R"
でリンクエラーになってしまいますね。

単純な対策は、S領域を小さくする(セクション情報のS領域最終アドレスを0xFFBE0Bより大きな値にする)ことですが、それによりプログラムがスタック領域不足で正常に動作しない可能性はあります。
その辺りはmapファイルを細かに見て、最大スタック使用サイズを満足するか検証してみてください。

投稿日時 - 2014-07-15 15:56:04

お礼

回答頂きありがとうございます。とても詳細に解説して頂き助かります。

R領域 というのは”初期化データの意味なんですね。
S(スタック)領域
P(プログラム領域)


なども、何となく曖昧に理解していたので非常に助かります。


この言葉がわかったため次のページでさらに理解が深まった感じがしています。


芦田研究室
http://www.haljion.net/index.php/2013-04-12-08-15-44/49-microcomputerapplication/180-2013-10-02-11-28-44

投稿日時 - 2014-07-17 09:48:27

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

何度も申し訳ない。

元々スタックサイズは0x200=512Bなんですね。
このサイズで問題なければ、0x1F5でも大丈夫な可能性はありますね。

投稿日時 - 2014-07-15 16:30:04

ANo.3

あー、嘘を書いてしまった・・・

H8S/2368の内蔵RAMは、0xFF4000~0xFFBFFFの32KBですね。
なので、S領域先頭アドレスは0xFFBFFFとなります。
仮にS領域最終アドレスを0xFFBE0C(R領域の最終アドレス0xFFBE0B+1)に設定すると、スタックサイズは0x1F5(501Byte)と非常に小さくなってしまいます。
このスタックサイズでプログラムが正常に動作するか?が問題ですね。
ローカル変数で大きな配列等を使用していたらアウトです。

ちなみにソースstacksct.h中の#pragma stacksizeの数値はいくつになっていますか?
(開発言語はC言語ですよね?)

投稿日時 - 2014-07-15 16:16:09

お礼

回答頂きありがとうございます。

stacksct.hにはこのような文がありました。

#pragma stacksize 0x200




やはり、今回の問題はR領域の使用率が限界に来ているということが確認できて助かりました。

今、検討していることとして、プログラムを見直すか、スタック領域を見直すか等を検討していますが、0x00600000は512kbyteのスパンシオン社製のRAM領域があります。ここに空きがある場合はこちらの領域を使おうかなども検討しています。

投稿日時 - 2014-07-17 09:56:52

ANo.1

toolchain内のセクション情報はどうなっていますか?
意図したように正しくマッピングされていますか?

投稿日時 - 2014-07-14 21:40:25

お礼

回答頂きありがとうございます。

toolchainの”最適化リンカ”項目のカテゴリ:セクションの項目を確認してみたところ、



Address section
0x00000400 , PResetPRG,PintPRG
0x00000800 , P,C,C$DSEC,C$BSEC,D
0x00600000 , BHEAPMEM
0x00670000 , BJURNEL
0x00FF4000 , BPROGERASE
0x00FF4000 , B,R
0x00FFBE00 , S


このような設定になっていることがわかりました。

以前からなのですが、このセクションというものが何なのか具体的なことがわかりません。


このRセクションから
0x00ffb366番地~ 0x00ffbe0bまでの 容量0xaa6バイトに配置されるデータとは何なのでしょうか?



現在ビルド時にエラーがでてくる場合のmapファイルの内容はエラー内容のみ表示されているのですが、プログラム修正前のmapファイルを見てみたところ、

このプログラム内で宣言されているグローバル変数がこのメモリ番地に配置されているようなのですが、Rセクションとグローバル変数に関係はありますでしょうか? またSとかDとかCとかも同様に疑問です。



それと、現在RセクションがSセクションに0x0aバイト分はみ出しているようですが、単純にtoolchaineの最適化リンカのセクションのRセクションを編集して容量を増やすと言うことはできないのでしょうか?


どうぞ、引き続きご教示頂きますようお願い致します。

投稿日時 - 2014-07-15 12:37:59

あなたにオススメの質問