こんにちは。NoMaYです。ルネサスさんのクイックコネクトIoTのサンプルプログラムのドキュメントを見ていて気付いたのですけれども、サンプルプログラムでのRXマイコンの使用ROM/RAMサイズがRAマイコン/RL78マイコンと比べてボロ負け感のあるほど大量ですね、、、これは要調査ですね(数値はサンプルプログラムをビルドした素朴な結果ですかね)、、、
ROM / RAM (bytes) RX & CC-RX? RA & GNUARM RL78 & CC-RL? RE & GNUARMHS300x 24,863 / 7,941 6,164 / 1,740 4,046 / 100 74,472 / 7,560FS2012 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-applicationRAファミリ、RXファミリ、RL78ファミリ FS2012 サンプルソフトウェアマニュアルR01AN6047JJ0100 Rev.1.00 September 30.21www.renesas.com/jp/ja/document/apn/fs2012-sample-applicationセンサソフトウェア ミドルウェア 製品ページwww.renesas.com/jp/ja/software-tool/sensor-software
こんにちは。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.zipHS300x_RX65N_NonOS.build.logHS300x_RX65N_NonOS.mapHS300x_RX65N_FreeRTOS.build.logHS300x_RX65N_FreeRTOS.mapNonOS版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進数)
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