HEW(v4.09.01.007)のプロジェクトをe2studio(v5.4.0.018)にインポートすると一部だけプログラムサイズが大きく変わる

お世話になります。

 

インポート後、e2studio上で少し動作確認した限りでは問題なさそうなのですが、

気になりましたので、質問させていただきました。

なぜ、インポートしただけでプログラムサイズに大きく差分(2倍強)がでてしまうのか、

もし原因をご存知の方がおられましたら、ご教授いただけませんでしょうか。

よろしくお願いいたします。

 

詳細情報は以下の通り。

====================

使用マイコン:RX63T(100pin)

使用ライブラリ:シンプルフラッシュAPI(ルネサス提供ライブラリ)、C言語標準ライブラリ

 

現在、開発環境をHEWからe2studioに載せ替えようとしています。

そこでHEWで作った環境をe2studioにインポートしてビルドし、

mapファイルを確認したところ、上記ライブラリとC言語標準ライブラリのサイズが、

以下の通り、2倍強になっておりました。

---------シンプルフラッシュAPI----------

RPFRAM        00000004  000012b7      12b4   4(※HEW)

RPFRAM    00000004  000007fb       7f8   4   (※e2Studi)

--------C言語標準ライブラリ-----------

PLIB       ffff4324  ffff858f      426c   4(※HEW)

PLIB       ffff382c  ffff7a6f      4244   4(※e2studio)

-------------------

 

因みに、自分で作成したプログラム領域については、

(想定通りに)プログラムサイズは変更されておりませんでした。

  • わわいです
    ヘッダファイルでstaticの変数の定義したりしてませんか?
    よーくあるあるネタなのが、ヘッダファイルで変数定義していて、特定のソースのDefineでだけその定義が有効になるようにしてるはずが、そのDefineを入れ忘れたために、全ソースで変数定義が有効になってて無駄に領域だけを食いつぶしている、というのがあります。
    #static変数なのでコンパイラのエラーさえ出ないという
    まー、ヘッダでは変数の定義なんかしてはいけない、って言ってますが、これやらかす人はなかなか減りませんねー
  • > 以下の通り、2倍強になっておりました。
    > ---------シンプルフラッシュAPI----------
    > RPFRAM        00000004  000012b7      12b4   4(※HEW)
    > RPFRAM    00000004  000007fb       7f8   4   (※e2Studi)
    > --------C言語標準ライブラリ-----------
    > PLIB       ffff4324  ffff858f      426c   4(※HEW)
    > PLIB       ffff382c  ffff7a6f      4244   4(※e2studio)
    > -------------------

    0000XXXX~ は RAM、FFFFXXXX~ はプログラム ROM ですが、外部シンボルを .map ファイルに出力するよう設定を変更しビルドを行い両セクションの内容を確認されては?

  • HEW と e2studio でツールチェーンは同一製品の同一のバージョンのものを使用されていますか?

    ウチの e2studio では、Renesas RXC Toolchain は

    • v2.06.00
    • v2.05.00
    • v2.04.01
    • v2.03.00
    • v2.02.00
    • v1.02.01

    とりあえずこれだけのバージョンが登録されており、内ひとつを選ぶようなってました。

  • わわいさん、fujitaさん

    いつも返信ありがとうございます。

    >わわいさん
    ヘッダー内で変数の定義はしていないはずですが、
    念のため再度チェックしました。
    結果としては、該当のヘッダーファイル内には定数を置いておりませんでした。

    >fujitaさん
    外部シンボルの件ですが、map内の以下の関数で"差"がでております。
    特にコンパイルスイッチ等もないので差が出てくるところはないと考えております。(と考えておりましたが、以下のツールチェインの差異によっては差がでそうですね。)
    _flash_init 00000004 136 func ,l *  :HEW
    _flash_init 00000004 62 func ,l 1 :e2studio

    >HEW と e2studio でツールチェーンは同一製品の同一のバージョンのものを使用されていますか?
    失念しておりました、ツールチェインは差があります。
    HEWはv1.02.01で、e2studioはv2.06.00です。

    念のため確認させてください。
    そもそもツールチェインを使ってプログラムファイルを出力(変換)するため、ツールチェインの差異によってはプログラムの出力結果が異なると理解しておりますが、認識誤り等ありませんでしょうか。
  • > ツールチェインを使ってプログラムファイルを出力(変換)するため、ツールチェインの差異によってはプログラムの出力結果が異なると理解しておりますが、認識誤り等ありませんでしょうか。

    ありません。
  • fujitaさん

    ありがとうございました。
    原因も理解できましたので、本件はこれにてCloseとさせていただきます。
  • > 原因も理解できましたので、

    ひとつの可能性がすべての原因であるとは限りませんよ。
  • わわいです
    ツールチェインのバージョンを合わせてやってみれば?
    しかし、ツールチェインのバージョン違いごときでそんなに差が出るとは思えんが。
  • fujitaさん
    >ひとつの可能性がすべての原因であるとは限りませんよ。
    ご指摘ありがとうございます。
    原因の一つとして考慮しておきます。
    詳細に動作確認を行い、実装した機能がHEWの時と差分がなければOKとしたいと思います。

    >わわいさん
    HEW側はv2.06.00に対応しておりませんので、e2studio側をv1.02.01にダウンしてビルドしてみましたが、
    以下のエラーが出てしまいました。
    しばらく調べていたのですが、このエラーの原因がつかめておりません。
    業務が立て込んでいることもありますので、時間ができたらまた調べてみようと思います。
     longjmp.src(63) : A2058 (E) Illegal operand is used
     setjmp.src(62) : A2058 (E) Illegal operand is used
  • setjmp() や longjmp() は標準ライブラリで提供されるものと思いますが、アセンブリソースをアセンブルしてるのが不思議な感じですね。