RX MCUのROM/RAM usage sizeがRenesas QuickConnect IoTのsample programでボロ負け(very worse than)している件(RA MCUやRL78 MCUに比べて)

こんにちは。NoMaYです。

ルネサスさんのクイックコネクトIoTのサンプルプログラムのドキュメントを見ていて気付いたのですけれども、サンプルプログラムでのRXマイコンの使用ROM/RAMサイズがRAマイコン/RL78マイコンと比べてボロ負け感のあるほど大量ですね、、、これは要調査ですね(数値はサンプルプログラムをビルドした素朴な結果ですかね)、、、

ROM / RAM (bytes)
            RX & CC-RX?        RA & GNUARM         RL78 & CC-RL?      RE & GNUARM
HS300x      24,863 / 7,941      6,164 / 1,740       4,046 / 100         74,472 / 7,560
FS2012      24,696 / 7,945      7,984 / 1,676       4,792 / 102         -

以下、HS300xサンプルソフトウェアマニュアルの画面コピーです。






[関連リンク]

RAファミリ、RXファミリ、RL78ファミリ、RE01 256KBグループ HS300xサンプルソフトウェアマニュアル
R01AN5897JJ0110 Rev.1.10 September 30.21
www.renesas.com/jp/ja/document/apn/hs300x-sample-application

RAファミリ、RXファミリ、RL78ファミリ FS2012 サンプルソフトウェアマニュアル
R01AN6047JJ0100 Rev.1.00 September 30.21
www.renesas.com/jp/ja/document/apn/fs2012-sample-application

センサソフトウェア ミドルウェア 製品ページ
www.renesas.com/jp/ja/software-tool/sensor-software
 

Parents
  • こんにちは。NoMaYです。

    今回、以下の処置をしてみました。そうしたところ、FreeRTOS版でプログラムサイズの大小が逆転しましたね。(RX MCU+CC-RXの方がRA MCU+GNU ARM Embeddedより小さくなった!? これは追加調査が必要ですかね、、、)

    (1) BSPモジュールで使用するスタックはIスタックのみとする
    (1') Iスタックサイズは、NonOS版では1024バイト、FreeRTOS版では3072バイト、とする
    (2) ヒープサイズに関して後述の特記事項あり
    (3) printfサポートの下位階層ルーチンは除外する
    (4) Software Interruptサポートルーチンは除外する
    (5) RIICモジュールは除外する

    ヒープサイズに関する特記事項

    ・RXスマートコンフィグレータ/BSPモジュールではヒープ領域を明示的に変数として確保しますのでRAMサイズに計上されますが、GNUARMではヒープ領域は空きメモリに割り付けられていますのでRAMサイズに計上されません。

    なお、MAPファイルとビルドログファイルを以下のzipファイルに固めて置いておきます。また、この投稿の末尾にはCC-RXプロジェクトの設定変更箇所の画面コピー(2枚)とMemory Usageビューの画面コピー(7枚)もあります。

    r01an5897xx0110-hs300x_refactor_map_files_20211020.zip
    HS300x_RX65N_NonOS.build.log
    HS300x_RX65N_NonOS.map
    HS300x_RX65N_FreeRTOS.build.log
    HS300x_RX65N_FreeRTOS.map

    NonOS版

    RX65N: e2 studio 2021-10 & CC-RX V3.03.00

    施術前

    PROGRAM SECTION:  00005ba1 Byte(s)  23457 バイト(10進数)
    ROMDATA SECTION:  00000e7a Byte(s)   3706 バイト(10進数)
    RAMDATA SECTION:  00001f2d Byte(s)   7981 バイト(10進数)

     
    前回施術後

    PROGRAM SECTION:  00004343 Byte(s)  17219 バイト(10進数)
    ROMDATA SECTION:  00000e0a Byte(s)   3594 バイト(10進数)
    RAMDATA SECTION:  00001b0d Byte(s)   6925 バイト(10進数)

     
    今回施術後

    PROGRAM SECTION:  000025a0 Byte(s)   9632 バイト(10進数)
    ROMDATA SECTION:  0000082e Byte(s)   2094 バイト(10進数)
    RAMDATA SECTION:  00000c12 Byte(s)   3090 バイト(10進数)

     
    (参) RA6M4: e2 studio 2021-10 & FSP V3.4.0 & GNU ARM Embedded 9.3.1 2020q2

       text    data     bss     dec     hex filename
       6684      20    1684    8388    20c4 HS300x_RA6M4_NonOS.elf

     
    FreeRTOS版

    RX65N: e2 studio 2021-10 & CC-RX V3.03.00

    施術前

    PROGRAM SECTION:  0000952c Byte(s)  38188 バイト(10進数)
    ROMDATA SECTION:  00000f2e Byte(s)   3886 バイト(10進数)
    RAMDATA SECTION:  0000705d Byte(s)  28765 バイト(10進数)

     
    前回施術後

    PROGRAM SECTION:  00005e64 Byte(s)  24164 バイト(10進数)
    ROMDATA SECTION:  00000ec6 Byte(s)   3782 バイト(10進数)
    RAMDATA SECTION:  00006c29 Byte(s)  27689 バイト(10進数)

     
    今回施術後

    PROGRAM SECTION:  00004144 Byte(s)  16708 バイト(10進数) ← RX MCU+CC-RXの方がRA MCU+GNU ARM Embeddedより小さくなった?!
    ROMDATA SECTION:  000008f4 Byte(s)   2292 バイト(10進数)
    RAMDATA SECTION:  000061ae Byte(s)  25006 バイト(10進数)

     
    (参) RA6M4: e2 studio 2021-10 & FSP V3.4.0 & GNU ARM Embedded 9.3.1 2020q2

       text    data     bss     dec     hex filename
      20132      68    6140   26340    66e4 HS300x_RA6M4_FreeRTOS.elf ← RX MCU+CC-RXの方がRA MCU+GNU ARM Embeddedより小さくなった?!

     
    以下、CC-RXプロジェクトの設定変更箇所の画面コピー(2枚)とMemory Usageビューの画面コピー(7枚)です。











     

  • こんにちは。NoMaYです。

    今回、あえて未使用の変数/関数を削除する最適化を無効にしてプログラムサイズを比較したところ、ひとつの可能性として思い浮かんだのですが、同じソースに対してならはRX MCU+CC-RXはRA MCU+GNU ARM Embeddedの2/3ぐらいの小さいコードになるのでは?ということです。(なんというか、やはり、RX MCU+CC-RXでのルネサス クイックコネクトIoT センサミドルウェアの言わば土台の部分のサイズが大き過ぎて、その特質が表面に出られない状態なのかなぁ、と、、、)

                                NonOS版  FreeRTOS版  プログラムサイズ増加分(≒追加FreeRTOSソース分)
    RX MCU+CC-RX               12,421   27,296      14,875 ①
    RA MCU+GNU ARM Embedded    11,792   36,500      24,708 ②

    ① ÷ ② = 0.60 ≒ 2/3

     
    注1) いずれも、あえて未使用の変数/関数を削除する最適化を無効にした場合、でのプログラムサイズです
    注2) なお、その場合、RA MCU+GNU ARM Embeddedではリンクエラーが発生しますのでリンカスクリプトを修正しました

    以下、サイズ情報のコピペです。

    RX MCU+CC-RXでのNonOS版 (前回プロジェクトで未使用の変数/関数を削除する最適化を無効にした場合)

    PROGRAM SECTION:  00003085 Byte(s)  12421 バイト(10進数)
    ROMDATA SECTION:  00000892 Byte(s)   2194 バイト(10進数)
    RAMDATA SECTION:  00000c16 Byte(s)   3094 バイト(10進数)

     
    RX MCU+CC-RXでのFreeRTOS版 (前回プロジェクトで未使用の変数/関数を削除する最適化を無効にした場合)

    PROGRAM SECTION:  00006aa0 Byte(s)  27296 バイト(10進数)
    ROMDATA SECTION:  00000946 Byte(s)   2374 バイト(10進数)
    RAMDATA SECTION:  000065ba Byte(s) 26042 バイト(10進数)

     
    RA MCU+GNU ARM EmbeddedでのNonOS版 (未使用の変数/関数を削除する最適化を無効にした場合)

       text       data        bss        dec        hex    filename
      11792        416       1888      14096       3710    HS300x_RA6M4_NonOS.elf

     
    RA MCU+GNU ARM EmbeddedでのFreeRTOS版 (未使用の変数/関数を削除する最適化を無効にした場合)


       text       data        bss        dec        hex    filename
      36500        464       6344      43308       a92c    HS300x_RA6M4_FreeRTOS.elf

     

Reply
  • こんにちは。NoMaYです。

    今回、あえて未使用の変数/関数を削除する最適化を無効にしてプログラムサイズを比較したところ、ひとつの可能性として思い浮かんだのですが、同じソースに対してならはRX MCU+CC-RXはRA MCU+GNU ARM Embeddedの2/3ぐらいの小さいコードになるのでは?ということです。(なんというか、やはり、RX MCU+CC-RXでのルネサス クイックコネクトIoT センサミドルウェアの言わば土台の部分のサイズが大き過ぎて、その特質が表面に出られない状態なのかなぁ、と、、、)

                                NonOS版  FreeRTOS版  プログラムサイズ増加分(≒追加FreeRTOSソース分)
    RX MCU+CC-RX               12,421   27,296      14,875 ①
    RA MCU+GNU ARM Embedded    11,792   36,500      24,708 ②

    ① ÷ ② = 0.60 ≒ 2/3

     
    注1) いずれも、あえて未使用の変数/関数を削除する最適化を無効にした場合、でのプログラムサイズです
    注2) なお、その場合、RA MCU+GNU ARM Embeddedではリンクエラーが発生しますのでリンカスクリプトを修正しました

    以下、サイズ情報のコピペです。

    RX MCU+CC-RXでのNonOS版 (前回プロジェクトで未使用の変数/関数を削除する最適化を無効にした場合)

    PROGRAM SECTION:  00003085 Byte(s)  12421 バイト(10進数)
    ROMDATA SECTION:  00000892 Byte(s)   2194 バイト(10進数)
    RAMDATA SECTION:  00000c16 Byte(s)   3094 バイト(10進数)

     
    RX MCU+CC-RXでのFreeRTOS版 (前回プロジェクトで未使用の変数/関数を削除する最適化を無効にした場合)

    PROGRAM SECTION:  00006aa0 Byte(s)  27296 バイト(10進数)
    ROMDATA SECTION:  00000946 Byte(s)   2374 バイト(10進数)
    RAMDATA SECTION:  000065ba Byte(s) 26042 バイト(10進数)

     
    RA MCU+GNU ARM EmbeddedでのNonOS版 (未使用の変数/関数を削除する最適化を無効にした場合)

       text       data        bss        dec        hex    filename
      11792        416       1888      14096       3710    HS300x_RA6M4_NonOS.elf

     
    RA MCU+GNU ARM EmbeddedでのFreeRTOS版 (未使用の変数/関数を削除する最適化を無効にした場合)


       text       data        bss        dec        hex    filename
      36500        464       6344      43308       a92c    HS300x_RA6M4_FreeRTOS.elf

     

Children
No Data