プロが教えるわが家の防犯対策術!

最近H8/3694Fを使ってマイコンの勉強をしております。
HEWを使ってコンパイルするときのセクションの設定に
ついて質問があります。

プログラム・セクションの設定を一通り終え、ビルドすると
「L2321 (E) section "S" overlaps sction "P"」
とエラーメッセージが出てしまいました。

色々調べてみるとSはスタック領域、Pはプログラム領域
でこれに重なりができてしまっているようなのですが、
これ以上どうしてよいのかわからず困っています。

おそらくセクション設定を変更すればよいと思っていますが
プログラム領域にどれくらい、スタック領域にどれくらい
を配置すればいいというのはどうやって求めればよいのでしょう?
HEWのメモリマップを表示させて見る方法があるようですが
見てもいまいちわかりませんでした。

使用環境:OS:WindowsXP、HEW4.04.01.001

以上、追記補足いたします。詳しい方教えていただけないでしょうか

A 回答 (3件)

実際のリンク結果のアドレスマップは、「Standard Toolchain」の最適化リンカのオプションを変更すれば出力できるはずです。


「リンクマップファイル」がキーワードでマニュアル等を探してみてください。うまく行けば、[プログラム名].mapの名前で作成されるはずです。

>「L2321 (E) section "S" overlaps sction "P"」
RAMで実行する設定にしたなら、このエラーも納得です。
プログラムが本当に大きすぎるんだと思います。
>0X0000FE80 S
となっていますので、設定を変えていないと0x100サイズのスタックが取られるらしいので、0xFD80-0xFE80はスタックになります。
プログラムの部分のPセクションが、0xFD80を超えてしまっていると思いますよ。
    • good
    • 1
この回答へのお礼

私が試したときはリンクがうまく行かない場合、
mapファイルはエラー文のみ書かれており割り当てが
どのようになっているかはみることができませんでした。
マイコンの教科書だけでなくマニュアルを探してじっくり
読んでみます。

1点、スタック領域は補足の通り0xFB80から指定してあります
のでデフォルト状態で0x100のスタック領域が確保された場合
0xFE80~0xFF80がスタック領域となるのではないでしょうか?
こちらもマニュアルを探してみます。

お礼が遅くなってしまいましたが誠にありがとうございました。

お礼日時:2009/02/14 01:00

あっ、そうですね。

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

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

これにて質問を閉じさせていただきます。

お礼日時:2009/02/18 23:46

H8は日ごろ使ってないですが、まずH8/3694Fのデータシートとマイコン基板のマニュアルを見て、内蔵ROMとRAMと外部RAMのアドレスを確認すること。

特にプログラムをROMに書くのか、RAMで実行するかで話が違ってきます。
次にHEWのセクションの設定を確認します。
調べた所、「ビルドメニュー→H8S,H8/300 Standard Toolchain」にあるみたいです。

メモリマップの一覧も補足して貰えると何かコメント出来るかもしれません。

この回答への補足

ご回答ありがとうございます。
現在渡井の環境では、ROMにはモニタプログラムを
入れておいてプログラムはRAMで実行しています。
アドレスとセクションはそれぞれ下記のように
設定しています。
0x0000F840 CV0
0X0000F880 PResetPRG,P,C,C$DSEC,C$BSEC,D
0X0000FB80 B,R
0X0000FE80 S

「ビルドメニュー→H8S,H8/300 Standard Toolchain」
は見てみましたがどの設定でどのアドレスにリンクされた
という情報を見ることができませんでした。

補足日時:2009/02/11 23:39
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!