こんにちは。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
チョコです。
RL78は小さなプログラムに対応した命令セット(アドレッシング)になっているから、小さなプログラムですむ範囲ならより効率的になるのではないでしょうか。
それよりも、RL78では、ROM以上にRAMが少なくなっていますね。
この結果だけ見ると、大は小を兼ねるとは言えないようですね。
こんにちは。NoMaYです。自分でビルドしてみました。MAPファイルとビルドログファイルを以下のzipファイルに固めて置いておきます。内容の検討は、これからです。r01an5897xx0110-hs300x_map_files_20211016.zipr01an5897xx0110-hs300x_map_files_20211017.zip GNURXとGNURL78の分も追加しましたHS300x_RX65N_NonOS.build.logHS300x_RX65N_NonOS.mapHS300x_RA6M4_NonOS.build.logHS300x_RA6M4_NonOS.mapHS300x_RL78G14_NonOS.build.logHS300x_RL78G14_NonOS.mapHS300x_RX65N_FreeRTOS.build.logHS300x_RX65N_FreeRTOS.mapHS300x_RA6M4_FreeRTOS.build.logHS300x_RA6M4_FreeRTOS.mapHS300x_RX65N_NonOS_GCC.build.logHS300x_RX65N_NonOS_GCC.mapHS300x_RL78G14_NonOS_GCC.build.logHS300x_RL78G14_NonOS_GCC.mapHS300x_RX65N_FreeRTOS_GCC.build.logHS300x_RX65N_FreeRTOS_GCC.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進数)
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
RL78/G14: e2 studio 2021-10 & CC-RL V1.10.00
PROGRAM SECTION: 00000d65 Byte(s) 3429 バイト(10進数)ROMDATA SECTION: 00000320 Byte(s) 800 バイト(10進数)RAMDATA SECTION: 00000060 Byte(s) 96 バイト(10進数)
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進数)
text data bss dec hex filename 20132 68 6140 26340 66e4 HS300x_RA6M4_FreeRTOS.elf
[追記]GNURXとGNURL78の分も追加しましたNonOS版RX65N: e2 studio 2021-10 & GNURX 8.3.0.202102
text data bss dec hex filename 49956 1104 7724 58784 e5a0 HS300x_RX65N_NonOS_GCC.elf
RL78/G14: e2 studio 2021-10 & GNURL78 4.9.2.202103
text data bss dec hex filename 9816 146 110 10072 2758 HS300x_RL78G14_NonOS_GCC.elf
FreeRTOS版RX65N: e2 studio 2021-10 & GNURX 8.3.0.202102
text data bss dec hex filename 75076 1132 28560 104768 19940 HS300x_RX65N_FreeRTOS_GCC.elf
こんにちは。NoMaYです。とりあえず(というか実は闇雲に)、HS300x_RX65N_NonOSプロジェクトでMemory Usageビューを開いてみました。(MAPファイルを直接見るよりは幾らか見易いでしょうか、、、)画面コピー(7枚)
こんにちは。NoMaYです。RAマイコンのソフトウェア開発プラットフォームのGNU ARM Embeddedプロジェクトでは、プロジェクト作成時のデフォルトの設定が、未使用の変数/関数を削除する最適化を行う、という設定になっています。そこで、CC-RXでも同様の最適化を施してみました。ただ、現状は、以下のスレッドにあるように単にコンパイルオプションを設定するだけでは効き目が弱いですので、セクション配置順とオブジェクトリンク順も一緒に調整して効き目を強めるようにしてみました。CC-RXの未使用の変数/関数を削除する最適化の効き目がGNURX/ICCRXより歴然と弱いのですが、、、japan.renesasrulz.com/cafe_rene/f/forum21/6403/cc-rx-gnurx-iccrx結果は以下の通りでした。r01an5897xx0110-hs300x_opt_map_files_20211017.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: 00004343 Byte(s) 17219 バイト(10進数)ROMDATA SECTION: 00000e0a Byte(s) 3594 バイト(10進数)RAMDATA SECTION: 00001b0d Byte(s) 6925 バイト(10進数)
FreeRTOS版RX65N: e2 studio 2021-10 & CC-RX V3.03.00施術前
PROGRAM SECTION: 00005e64 Byte(s) 24164 バイト(10進数)ROMDATA SECTION: 00000ec6 Byte(s) 3782 バイト(10進数)RAMDATA SECTION: 00006c29 Byte(s) 27689 バイト(10進数)
以下、CC-RXプロジェクトの設定変更箇所の画面コピーです。(6枚)
こんにちは。NoMaYです。ここでまた(というか惰性かも?)、HS300x_RX65N_NonOSプロジェクトでMemory Usageビューを開いてみました。(CC-RXで未使用の変数/関数を削除する最適化を行った後のものです。)画面コピー(7枚)
NoMaYさん
シェルティです。こんにちは。
貴重なレポートありがとうございます。大変助かります。本件、開発チームまじえて議論中です。何らかの改善を施したいと考えています。今のところ以下抽出済です。
①RX環境のROMサイズは、BSPとIICバス制御のソフトが膨らんでいるのが原因
②RX環境のRAMサイズは、BSPが抱えるスタックが不必要な分量あるのが原因
③RX環境のROMサイズは、未使用シンボルがある場合削除する最適化項目がOFFになっていることが原因
④REファミリも調査を進める
以上です
シェルティさん、こんにちは。NoMaYです。リプライありがとうございます。ところで、スタックサイズですけれど、今回のRAマイコンのプロジェクトでは以下の画面コピーの通り、NonOS版で1024バイト、FreeRTOS版で3072バイト、確保されていました。後者の場合に多く確保されている理由は分かりません。FreeRTOSを使うようなプロジェクトでは規模が大きく割り込み処理もスタック変数を多く使うし多重割り込みも良く使うということなのかも知れません、、、画面コピー(2枚)
こんにちは。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: 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
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
こんにちは。NoMaYです。以下のアプリケーションノートが改版されていますね。プログラムサイズの記載方法が大きく変わってました。以前はプログラム全体のサイズの記載だったのですが、今ではアプリケーションノートサンプルプログラム部分そのものだけのサイズになったようです。(つまり、BSPモジュール、I2Cモジュール?(センサミドルウェアも?)、といった部分のサイズは除外されて記載されるようになったようです。もっとも、RL78やREのサイズに関しては同次元での比較になっていない点もあるようにも思いますけれども。)ただ、それでも以下のOB1203でのサイズをみると、RXマイコン+CC-RXのコード効率は、RAマイコン+GNUARMのコード効率よりも、やはり良いのではないのかなぁ、と思うのです。(贔屓目なだけかも知れませんけれども。) (もっとも、ROMサイズがひとクラス小さくなるというような次元ではないので、どうこういうことでもないですけれども。)
ROM / RAM (bytes) RX & CC-RX RA & GNUARM Non-OS FreeRTOS Azure RTOS Non-OS FreeRTOS Azure RTOSHS300x 1,652 / 133 1,992 / 149 2,041 / 289 1,317 / 77 1,630 / 257 1,606 / 426OB1203 12,343 / 6,204 12,839 / 6,312 12,874 / 6,680 14,054 / 5,564 14,755 / 5,922 14,691 / 6,049
RAファミリ、RXファミリ、RL78ファミリ、RE01 256KB / 1500KBグループHS300xサンプルソフトウェアマニュアルPDFwww.renesas.com/jp/ja/document/apn/hs300x-sample-applicationZIPwww.renesas.com/jp/ja/document/scd/hs300x-sample-application-rev101-sample-codeRAファミリ、RXファミリ、RL78ファミリ、RE01 256KB / 1500KBグループOB1203サンプルソフトウェアマニュアルPDFwww.renesas.com/jp/ja/document/apn/ob1203-sample-application-sample-codeZIPwww.renesas.com/jp/ja/document/scd/ob1203-sample-application-sample-code以下、ドキュメントの画面コピーです。HS300xサンプルソフトウェアマニュアルOB1203サンプルソフトウェアマニュアル