2020年04月18日

メモリ空き領域確認方法

今回は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
**:**:** Build Finished (took **s.**ms)
〜〜〜

メモリ使用量はtext、data、bssという形で分かれて情報が表示されます。

.text プログラムコード、通常はFlash
.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
にします。



Linker-Setting.jpg
実際に設定した際の設定画面はこんな感じです



この設定状態でビルドすると...
〜〜〜
Memory region  Used Size   Region Size   %age Used
         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
**:**:** Build Finished (took **s.**ms)
〜〜〜

という感じでメモリの使用率とサイズが表示され、どれくらいメモリを占有しているのか一目で分かります。なお、通常はSDRAMがなければSDRAMの項目は表示されません。SW4STM32以外でもSTM32CubeIDEといったarm-gcc系であれば同様に使えると思います。大量にメモリを使用する場合にはぜひ、このような設定を有効化してみてください。


posted by Crescent at 00:00| Comment(0) | 組込ソフト | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。