今回はSW4STM32といったarm-gcc環境でビルド時にメモリ領域を確認する方法を紹介します。
簡単なプログラムであれば、FlashやRamの領域を気にする必要はありませんが、大量にメモリを使用する場合はどれくらい既に占有しているのか気になると思います。リンカの設定を少し追加することで詳細情報をビルド時のコンソールに表示することが可能です。
デフォルトではビルド後のコンソール画面に下記のように表示されます。
〜〜〜
directory post-build
Generating hex and Printing size information:
arm-none-eabi-objcopy -O ihex "***.elf" "***.hex"
arm-none-eabi-size "***.elf"
text data bss dec hex filename
22604 484 1828 24916 6154 ***.elf
Generating hex and Printing size information:
arm-none-eabi-objcopy -O ihex "***.elf" "***.hex"
arm-none-eabi-size "***.elf"
text data bss dec hex filename
22604 484 1828 24916 6154 ***.elf
**:**:** Build Finished (took **s.**ms)
〜〜〜
メモリ使用量はtext、data、bssという形で分かれて情報が表示されます。
.text プログラムコード、通常はFlash
.data 初期値を持つ静的変数、通常はRAM
.bss 初期値を持たない静的変数、通常はRAM
.data 初期値を持つ静的変数、通常はRAM
.bss 初期値を持たない静的変数、通常はRAM
ただ、正直、text、data、bssという表示では分かりにくいと思います。リンカの設定を少し追加すると詳細情報をビルド時に表示することが可能です。
プロジェクトの「プロパティ」から「C/C++ Build」、「Settings」、「Tool Settings」、「MUC GCC Linker」のCommand欄に設定を追加します。
Command欄の初期値は
gcc
となっていますが、
-Wl,--print-memory-usage
を追加して
gcc -Wl,--print-memory-usage
にします。
実際に設定した際の設定画面はこんな感じです
この設定状態でビルドすると...
〜〜〜
Memory region Used Size Region Size %age Used
RAM: 2080 B 320 KB 0.63%
RAM: 2080 B 320 KB 0.63%
FLASH: 15284 B 1 MB 1.46%
SDRAM: 341600 B 8 MB 4.07%
Finished building target: ***.elf
C:*** print-directory post-build
Generating hex and Printing size information:
arm-none-eabi-objcopy -O ihex "***.elf" "***.hex"
arm-none-eabi-size "***.elf"
text data bss dec hex filename
15156 120 343568 358844 579bc ***.elf
C:*** print-directory post-build
Generating hex and Printing size information:
arm-none-eabi-objcopy -O ihex "***.elf" "***.hex"
arm-none-eabi-size "***.elf"
text data bss dec hex filename
15156 120 343568 358844 579bc ***.elf
**:**:** Build Finished (took **s.**ms)
〜〜〜
という感じでメモリの使用率とサイズが表示され、どれくらいメモリを占有しているのか一目で分かります。なお、通常はSDRAMがなければSDRAMの項目は表示されません。SW4STM32以外でもSTM32CubeIDEといったarm-gcc系であれば同様に使えると思います。大量にメモリを使用する場合にはぜひ、このような設定を有効化してみてください。