2017-07-10 4 views
-1

私の組み込みアプリケーションでは、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?

答えて

-1

要するに、はい。初期化されたデータセクションのイニシャライザを格納する必要があるため、 "データ"セクションはメモリ使用量で2回カウントされます.1回はフラッシュ用、1回はRAM用です。これは定数データを "const"として宣言することに非常に勤勉であることが重要な理由です。そのデータはフラッシュメモリに格納され、メモリ使用量全体で1回だけカウントされます。

+2

彼のコードはスタックなしで実行されますか?私は彼がそれを説明する必要があると思う。場合によっては、デバイスは 'bss'以外のメモリも必要とすることがあります。ハードウェアのサイズを超えているかどうかを確認するには、カスタムリンカーファイルを使用することをお勧めします。ベクタテーブルは特別な場所にある必要があり、スペースも必要です。 –

+0

PeterJの回答からわかるように、最後のバイトまでカウントダウンする場合は、スタック、ヒープ、その他のものを考慮するリンカーマップが必要です。ほとんどのベンダーが提供するデフォルトのリンカースクリプトは十分です。そして、はい、サイズプログラムはすべてを伝えるわけではありません。判断と経験はまだ必要です。 –

+0

411は簡単です。 RAMブロックは1ブロックしかありません。しかし£2のSTM32F3でもCCMRAMはアカウントに取り込まれていません。私は、DMA +スタックとヒープによってアクセスされる変数とデータ、時には時間に敏感なルーチンと、それ以外の場合は "通常の" SRAMに使用します。もちろん、カスタムリンカースクリプトとスタートアップルーチンが必要です –

0

はい、また、コード内でダイナミックメモリを明示的に使用していなくても、ライブラリ関数が使用する可能性があります。メモリ使用量を極限に抑えようとしていて、RAMの総量に近いアプリケーションを使用している場合は、それを考慮する必要があります。そうしないと、厄介なランタイム問題が発生する可能性があります。

1

最終的には、上記のリンクの概要ごとにデータセクション+ bss セクションになると思いますか?従ってこの場合、85284 バイト。

リンカースクリプトによって異なります。特に、スタックとヒープの構成テキストセグメント&データセグメントでも同じです。

詳細については、.mapファイルを参照する必要があります。

関連する問題