• ベストアンサー
  • すぐに回答を!

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

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数4623
  • ありがとう数3

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

  • ベストアンサー
  • 回答No.2

>以前からなのですが、このセクションというものが何なのか具体的なことがわかりません。 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ファイルを細かに見て、最大スタック使用サイズを満足するか検証してみてください。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答頂きありがとうございます。とても詳細に解説して頂き助かります。 R領域 というのは”初期化データの意味なんですね。 S(スタック)領域 P(プログラム領域) なども、何となく曖昧に理解していたので非常に助かります。 この言葉がわかったため次のページでさらに理解が深まった感じがしています。 芦田研究室 http://www.haljion.net/index.php/2013-04-12-08-15-44/49-microcomputerapplication/180-2013-10-02-11-28-44

関連するQ&A

  • H8マイコンのメモリセクションの変更を行いたい

    以前私はこのような質問をこのサイトでさせて頂きました。 HEWのビルドで出てきたビルドエラーについて#8678205&#160;#okwave #q8678205 http://okwave.jp/qa/q8678205.html この質問の中で (エラー内容) ** L2321 (E) Section "S" overlaps section "R" Optimizing Linkage Editor Abort ERROR: Process failed with return code: 1 このエラー内容が、Rセクション(初期化領域)の容量がSセクション(スタック領域)にオーバーしているということがわかり、Rセクションの容量を減らすからSセクションの容量を減らして、Rセクションに割り当てる解決方というのを知りました。 実際に開発環境のHEWのtoolchainのセクション設定の項目で変更してビルドが完了し、mapファイルでも設定した通りのアドレスにセクションが設定できることを確認しました。 そのため、初期ではSセクションのスタックは0x200(512)Byteだったのですが、0x1E0(480)Byteと小さくしてしまったのですが、スタック領域を小さくするというのは少し不安を感じています。 他にRAM領域がないかを確認したところ、H8/2368マイコンの外部にCYPRESS社製のSRAM CY62148EV30LL-45ZSX1 TSOPII(32P3Y-H) 512kbyteのメモリをアドレス0x600000番地スタートで接続していることがわかりました。 512kbyteも容量があり、Rセクションはマップで見ても3.2kbyte程度なので、Rセクションだけこのメモリ領域に移したいと考えています。 ただ、 元々このメモリには次のようなメモリセクションが設定されています。 0x00600000 , BHEAPMEM 0x00670000 , BJURNEL このBHEAPMEMとBJURNELという文字をソースコード内で検索してみても全く使用されていない文字で検索できませんでした。 ソースコード内の0x600000番地についての記述では次のような (memmap.h) #define SRAM_BASE_ADDR 0x600000 /* size 512 K Byte (0x80000) */ #define SRAM_BASE 0x600000 /* size 512 K Byte (0x80000) */ (task.c) void * my_malloc(size_t size) { void * p; OS_ENTER_CRITICAL(); p = (void *)malloc(size); if(p == NULL || ((u32)p < (u32)SRAM_BASE_ADDR || (u32)p > ((u32)SRAM_BASE_ADDR + (u32)0x800000))) { printf("malloc error\n\r"); task_reset(); } OS_EXIT_CRITICAL(); return (void *)p; } 現在のメモリセクションマップはこのようになっています。 Address section 0x00000400 , PResetPRG,PintPRG 0x00000800 , P,C,C$DSEC,C$BSEC,D 0x00600000 , BHEAPMEM 0x00670000 , BJURNEL 0x00FF4000 , BPROGERASE 0x00FF4000 , B,R 0x00FFBE00 , S これを、次のように変えたいと思っています。 Address section 0x00000400 , PResetPRG,PintPRG 0x00000800 , P,C,C$DSEC,C$BSEC,D 0x00600000 , BHEAPMEM 0x0066F000 , R 0x00670000 , BJURNEL 0x00FF4000 , BPROGERASE 0x00FF4000 , B 0x00FFBE00 , S 実際にこのようなメモリセクションに変更することは可能なのか、また、実際に変更した場合にBHEAPMEM領域に問題が起きないかとか他に調べなければならないことなど、ご教示頂きますよう、どうぞよろしくお願い致します。

  • H8S2368マイコンのTCSR_1レジスタの4ビット目が1のはずなのに0と表示される。

    いま、H8S2368マイコンのプログラムを作っているのですが、 TCSR_1レジスタの値を printf("data:%X addr:%p\n\r", TMR1.TCSR.BYTE,(void*)&TMR1.TCSR.BYTE); このプログラムでリードしてみて、UART通信で受信したところ ”data:C0 addr:ffffb3” このレジスタのデータが0xC0というのを確認しました。 このH8S2368マイコンのデータシートの502ページ目(rjj09b0162_h8s2368.pdf)では、このレジスタの4ビット目はリザーブビットで、リードすると必ず”1”が読み込まれると書かれているのですが、なぜかそのビットが”0”で帰ってきます。 ”0xD0”ならばわかるのですが、これはなぜなのでしょうか?

  • ルネサスマイコン(R8C) ビルドエラーについて

    マイコン:R8C(R5F21226) 開発環境:HEW(Windows7) マイコン開発初心者です。 恐れ入りますが、ご教授頂きたく質問させて頂きます。 とあるプログラムを組んでいるのですが、 下記ビルドエラーが発生し、原因がわからず困っています。 『L2321 (E) Section "vector" overlaps section "program"』 文面から見るに、「ベクタ領域のアドレうがROM領域に重複している」 ということで宜しいのでしょうか? 各領域のアドレス値、並びベクタ領域も変更していません。 ※全て初期値のままです。 お手数ですが、このエラーが発生する主な原因を 教えて頂けないでしょうか?

その他の回答 (3)

  • 回答No.4

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

共感・感謝の気持ちを伝えよう!

  • 回答No.3

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答頂きありがとうございます。 stacksct.hにはこのような文がありました。 #pragma stacksize 0x200 やはり、今回の問題はR領域の使用率が限界に来ているということが確認できて助かりました。 今、検討していることとして、プログラムを見直すか、スタック領域を見直すか等を検討していますが、0x00600000は512kbyteのスパンシオン社製のRAM領域があります。ここに空きがある場合はこちらの領域を使おうかなども検討しています。

  • 回答No.1

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答頂きありがとうございます。 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セクションを編集して容量を増やすと言うことはできないのでしょうか? どうぞ、引き続きご教示頂きますようお願い致します。

関連するQ&A

  • printf文で変数のアドレスを表示することはできますか?

    いま、H8S2368でプログラミングを行っていて、変数に入れたデータをprintf文でシリアルで出力して確認したいと思い、 BYTE cur; long addr; cur = TMR1.TCSR.BYTE; addr = (long)&cur; printf("data:%X add:%X\n\r",cur,addr); このようにプログラムしました。 curに入ったデータはH8S2368マイコンの0xFFFFB3番地のTCSR_1というアドレスなので、一応そのアドレス番地の値も表示したいと思い設定したのですが、 ”data:C0 add:FF” という表示が出てきます。 アドレスが0xFFFFB3と出てこないのはなぜなのでしょうか?

  • H8 マイコン セクションの設定について

    最近H8/3694Fを使ってマイコンの勉強をしております。 HEWを使ってコンパイルするときのセクションの設定に ついて質問があります。 プログラム・セクションの設定を一通り終え、ビルドすると 「L2321 (E) section "S" overlaps sction "P"」 とエラーメッセージが出てしまいました。 色々調べてみるとSはスタック領域、Pはプログラム領域 でこれに重なりができてしまっているようなのですが、 これ以上どうしてよいのかわからず困っています。 おそらくセクション設定を変更すればよいと思っていますが プログラム領域にどれくらい、スタック領域にどれくらい を配置すればいいというのはどうやって求めればよいのでしょう? HEWのメモリマップを表示させて見る方法があるようですが 見てもいまいちわかりませんでした。 使用環境:OS:WindowsXP、HEW4.04.01.001 以上、追記補足いたします。詳しい方教えていただけないでしょうか

  • HEW統合開発環境のリンカー設定で”BHEAPMEM”という設定の意味は?

    今、H8S2368用のHEWで動かしていたサンプルプログラムをもらって、動かそうと思っていたときに、このマイコンには、FlashメモリとSRAMメモリが外部についていたので、どのようにアクセスしているのかなと思い調べていたのですが、 リンカーの設定でこの部分をどうやって使用しているのかというのがわかるということを教えてもらいました。 ちなみにFLASHメモリはサイプレス社の”CY62148EV30LL-45ZSX1TSOPII(32P3Y-H)” SRAMはSPANSION社製の”S29GL032N(03,04)”というのがつながっていて、 0x200000~0x40000 これがFLAHSHメモリの領域 0x600000~0x800000 これがSRAMメモリの領域となっています。 このリンカーの設定で0x600000のセクションに”BHEAPMEM”という設定をしているのですが、これはどういう意味の設定になるのでしょうか。 この”BHEAPMEM”という設定をすれば、ローカル変数や、グローバル変数や、バリアブルの変数などはFlashメモリ領域ではなく、0x600000のSRAM領域に自動的にコンパイラはデータを置くようになってくれるのでしょうか?

  • H8 3687 のベクターテーブルについて

    H8 3687 のベクターテーブルについて質問なんですが、タイマの割込み処理を使用したいんですが、 Sample.cの中に#pragma interrupt timer0_imia(vect=24) ↑                        ↑ プロジェクト名               割込み関数 とすると以下のようなエラーが出て正しくビルドできません。 L3102 (F)Section contents overlap in absolute section "セクション" 絶対アドレスセクションのセクション内データアドレスが重複しています。 ソースプログラムを修正してください。 どうすれば解決できるかわかりません。 ではよろしくお願いします。

  • 「すぐに使えるH8マイコン基盤」でビルドエラー

    「すぐに使えるH8マイコン基盤」を買って、 Eclipse , KPIT GNU Tool chain ,Java,Cygwin をインストールし、サンプルプログラム PROG_01_LED を再ビルドしたら次のようなメッセージが表示されてビルドできませんでした。 **** Build of configuration Debug for project PROG_01_LED **** **** WARNING: The "Debug" Configuration may not build **** **** because it uses the "Cygwin GCC" **** **** tool-chain that is unsupported on this system **** **** Attempting to build... **** (Cannot run program "make": Launching failed) どうしたら良いのでしょうか。アドバイスお願いします。

  • H8S/2633と超音波距離計の組み合わせ

    大学での研究として、H8マイコンを使用しています。 H8マイコン(H8S/2633)と超音波センサを利用した距離計を組み合わせようとしています。 超音波距離計はこちらで購入したものです。 http://www.japan-elekit.jp/product/24 表示回路の部分が異なりますが、回路図はほぼこちらと同じです↓ http://www.japan-elekit.jp/zoom/1703 ---------------------------------------------------------- 使用しているものは出力を読み取る部分がありませんので、 PIC16F84の3番ピンと6番ピンの信号をH8で受信して 超音波反射時間を求め、距離情報に変えようとしてます。 ---------------------------------------------------------- ここで質問なのですが、 H8S/2633でそのような計算は出来るのでしょうか。 マイコンへの取り込み方から教えて頂けないでしょうか。 ※プログラムはC言語を使用します。 (大学の授業で勉強した程度の知識しかありません) ※マイコンについてはほとんど知識がありません。

  • インターネット使用時の強制終了

    最近インターネット使用時に頻繁に強制終了されてしまい本当に困っています。 もしこれを見てなにか解ることがありましたら、教えてください。 詳細は次の通りです。 EXPLORER のページ違反です。 モジュール : KERNEL32.DLL、アドレス : 0187:bff7b9a6 Registers: EAX=00000000 CS=0187 EIP=bff7b9a6 EFLGS=00000246 EBX=8424b3f8 SS=018f ESP=019bfd58 EBP=8424b3e4 ECX=c60b5bb0 DS=018f ESI=8424b3f8 FS=542f EDX=81656964 ES=018f EDI=0000019c GS=0000 Bytes at CS:EIP: ff 76 04 e8 93 89 ff ff 5e c2 04 00 56 8b 74 24 Stack dump: 019bfd90 7f86de25 8424b3f8 019bfd90 0047ab1d 7f860000 75a4c3ae 00000000 75a4c75b 019bfd90 019bfd8c 019bfd88 019bfd8c 0000019c 0000019c 04580024 以上です。よろしくお願いします。

  • HEWでのビルド

    HEWのプロジェクトをビルドしようとすると L3430 (F) The total section size exceeded the limit というエラーがでます これはどういう意味でどうすれば解決するのでしょうか.

  • HEWでビルドができなくなった。

    社内の開発で使われていたソースのプロジェクトを自分のPCに入れてビルド作業を行おうとして拡張子”hws”のファイルをダブルクリックしてHEWを起動したのですが、なぜかビルドが無効になる現象がでてコンパイル作業ができない状況です。 また、メークファイルの更新のための依存関係の更新機能も無効になってしまいます。 解決する方法をご存知の方いらっしゃいませんでしょうか?

  • 56.comという動画共有サイトからダウンロードしたFLVが再生できない。

    www.56.com という動画共有サイトからダウンロードしたFLV形式の動画が、GOM Playerで再生できません。再生しようとすると ・再生に必要なコーデックがインストールされているか確認してください や、 ・メディアファイルが損傷されていないか確認してください などのメッセージがでます。 他のYouTubeなどからダウンロードしたFLVは再生できます。 ちなみにこれが失敗したバイナリ情報です。↓ -------------------- BINARY INFO -------------------- FileName : abcecw@56.com_56flv_121716955033x.flv Header Data : 46 4c 56 01 01 00 00 00 09 00 00 00 09 09 00 26 FLV............& 60 1f 52 c0 00 00 00 00 12 00 00 86 40 80 a0 00 `.R.........@... 83 12 aa 24 f1 51 27 8a ff ff cc 54 54 54 53 ff ...$.Q'....TTTS. fe 62 82 82 62 7f ff f3 14 14 13 13 81 ff 98 a0 .b..b.......... a0 98 9f ff fc c5 05 05 04 ff ff e6 28 28 26 29 ............((&) ff ff 31 41 41 41 4f ff f9 8a 0a 0a 09 ff ff cc ..1AAAO......... 50 50 4c 4f ff fe 62 82 82 62 7f ff f3 14 14 13 PPLO..b..b..... 13 ff 81 98 a0 a0 98 9f fc 0c c5 05 04 c4 ff e0 ................ 66 28 28 26 27 ff 03 20 a0 a0 96 3c 4f fe 0a 62 f((&'.. ...<O..b 82 82 62 9f f0 53 14 15 14 14 ff 81 98 b0 b0 a8 ..b..S.......... af fc 0c a2 e2 22 e2 2e ff ff 58 b1 7d b1 c3 f4 ....."....X.}... 7f 8e 1e 04 15 75 51 71 f3 2f 0f f4 48 2f 57 f3 ....uQq./..H/W. 10 47 df f8 f4 f9 f2 11 2f ff 9e b7 dc 79 90 40 .G....../....y.@ aa ed f7 f4 75 61 a2 31 f8 8c f8 37 f5 9f 7c bc ....ua.1...7..|. 03 7e d1 7f e5 4a 79 23 f4 10 65 cf 89 2a e1 09 .~..Jy#..e..*.. f8 f4 14 72 12 a2 83 00 e5 74 4b a9 1d 13 af 7d ...r.....tK....} 5a 34 80 1b f5 54 be 00 79 7a 8f 36 3b 7a 5f 95 Z4...T..yz.6;z_. 97 ff f3 d4 03 44 be dc 36 84 3e 06 06 2c 4b 21 .....D..6.>..,K! 56 55 73 ea aa d5 d1 47 df 5e 8e 10 69 78 40 cd VUs....G.^..ix@. 08 62 4f ed e9 b5 20 60 3c 04 bf 02 94 be 90 a4 .bO... `<....... 83 00 dd 77 e5 c0 d1 c1 b2 06 71 8a 5e f4 79 eb ...w......q.^.y. 3f 06 01 a8 03 44 45 75 c9 05 c0 82 01 ff 06 00 ?....DEu........ 3c 4b 1f d1 fd 1e c6 be cb 9b 9e a6 5c 0c 0c 98 <K..........\... 96 47 18 a5 ef 27 9c 35 03 01 e4 08 20 c1 7b 09 .G...'.5.... .{. 63 52 c0 40 2f 57 f0 84 5d 7f 6f ee 76 d6 de e6 cR.@/W..]o.v... 60 0c 00 77 02 11 71 14 47 9e f9 5d 41 d8 f2 e0 `..w..q.G..]A... 41 81 06 97 5a 10 84 bf 97 7e 31 e3 24 03 f0 6f A...Z....~1.$..o ef 5d 2e 06 01 c8 18 07 10 50 fb ca c2 08 96 de .].......P...... 65 7a 58 30 0d e0 1a 01 e5 c3 f9 15 09 6a fd e1 ezX0.........j.. e4 bc a6 50 c0 34 18 00 fc 08 6a 84 91 f4 e5 fc ...P.4....j..... 1e c1 7a b0 30 0d 77 44 99 9d cf 49 70 9e 20 eb ..z.0.wD...Ip. . fd b1 cf 63 f0 20 80 68 f6 5a 10 47 f9 b3 4e a9 ...c. .h.Z.G..N. どうしたら再生できるかどなたか教えてください。 お願いします。