• ベストアンサー

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

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

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

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

実際のリンク結果のアドレスマップは、「Standard Toolchain」の最適化リンカのオプションを変更すれば出力できるはずです。 「リンクマップファイル」がキーワードでマニュアル等を探してみてください。うまく行けば、[プログラム名].mapの名前で作成されるはずです。 >「L2321 (E) section "S" overlaps sction "P"」 RAMで実行する設定にしたなら、このエラーも納得です。 プログラムが本当に大きすぎるんだと思います。 >0X0000FE80 S となっていますので、設定を変えていないと0x100サイズのスタックが取られるらしいので、0xFD80-0xFE80はスタックになります。 プログラムの部分のPセクションが、0xFD80を超えてしまっていると思いますよ。

pony666
質問者

お礼

私が試したときはリンクがうまく行かない場合、 mapファイルはエラー文のみ書かれており割り当てが どのようになっているかはみることができませんでした。 マイコンの教科書だけでなくマニュアルを探してじっくり 読んでみます。 1点、スタック領域は補足の通り0xFB80から指定してあります のでデフォルト状態で0x100のスタック領域が確保された場合 0xFE80~0xFF80がスタック領域となるのではないでしょうか? こちらもマニュアルを探してみます。 お礼が遅くなってしまいましたが誠にありがとうございました。

その他の回答 (2)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.3

あっ、そうですね。0xFE80~0xFF80です。0xFF80からは内蔵IOレジスタ群になるのでメモリとして使えません。 プログラムの領域としては、0xF880~0xFB80と定義されていますので768バイト以内か確認してください。特にconstとかで配列を取るとすぐ無くなります。 プログラムコード用としてもかなり狭いので確認をしてみてください。一部プログラムを削ってコンパイルしてみるのも方法です。

pony666
質問者

お礼

しばらくインターネットへ接続できなかったので 連絡が遅くなってしまいました。 色々アドバイスいただきありがとうございました。 もう一度マニュアル・プログラムを見直してみます。 ありがとうございました。 これにて質問を閉じさせていただきます。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

H8は日ごろ使ってないですが、まずH8/3694Fのデータシートとマイコン基板のマニュアルを見て、内蔵ROMとRAMと外部RAMのアドレスを確認すること。特にプログラムをROMに書くのか、RAMで実行するかで話が違ってきます。 次にHEWのセクションの設定を確認します。 調べた所、「ビルドメニュー→H8S,H8/300 Standard Toolchain」にあるみたいです。 メモリマップの一覧も補足して貰えると何かコメント出来るかもしれません。

pony666
質問者

補足

ご回答ありがとうございます。 現在渡井の環境では、ROMにはモニタプログラムを 入れておいてプログラムはRAMで実行しています。 アドレスとセクションはそれぞれ下記のように 設定しています。 0x0000F840 CV0 0X0000F880 PResetPRG,P,C,C$DSEC,C$BSEC,D 0X0000FB80 B,R 0X0000FE80 S 「ビルドメニュー→H8S,H8/300 Standard Toolchain」 は見てみましたがどの設定でどのアドレスにリンクされた という情報を見ることができませんでした。

関連するQ&A