私の組み込みアプリケーションでは、STM32F411チップを使用しています。チップには512kbのフラッシュと128kbのRAMがあります。 私は資源のサイジングをexersizeしたいので、私がリソース(FLASHとRAM)でやっていることを監視することができますスタティックメモリのみを使用したリソースサイジング
私はMalloc()コールを使わないで静的にメモリを割り当てます。そして、gccでサイジングすることは私を与える:私が行っている測定値から
text data bss dec hex filename
230868 11236 74048 316152 4d2f8 application.elf
(https://mcuoneclipse.com/2013/04/14/text-data-and-bss-code-and-data-size-explained/)ノー動的に割り当てられたリソースがあるので、上記の情報は、RAMの使用状況に私にどのように深いの明確な指標を与えるべきであることを理解し私は、走る。
最終的にRAMセクションがデータセクション+上のリンクのサマリーごとのbssセクションになるとは思いますか?この場合、85284バイトです。
そして、Flashサイズはtext + dataセクションになります。この場合:242104?
彼のコードはスタックなしで実行されますか?私は彼がそれを説明する必要があると思う。場合によっては、デバイスは 'bss'以外のメモリも必要とすることがあります。ハードウェアのサイズを超えているかどうかを確認するには、カスタムリンカーファイルを使用することをお勧めします。ベクタテーブルは特別な場所にある必要があり、スペースも必要です。 –
PeterJの回答からわかるように、最後のバイトまでカウントダウンする場合は、スタック、ヒープ、その他のものを考慮するリンカーマップが必要です。ほとんどのベンダーが提供するデフォルトのリンカースクリプトは十分です。そして、はい、サイズプログラムはすべてを伝えるわけではありません。判断と経験はまだ必要です。 –
411は簡単です。 RAMブロックは1ブロックしかありません。しかし£2のSTM32F3でもCCMRAMはアカウントに取り込まれていません。私は、DMA +スタックとヒープによってアクセスされる変数とデータ、時には時間に敏感なルーチンと、それ以外の場合は "通常の" SRAMに使用します。もちろん、カスタムリンカースクリプトとスタートアップルーチンが必要です –