2

at32uc3b0512 で実行されているアプリケーションの RAM 使用量を確認する方法を探しています。

arv32-size.exe foo.elf は私に教えてくれます:

  text    data     bss     dec     hex filename
263498   11780   86524  361802   5854a foo.elf

「google」によると、RAM 使用量は .data + .bss です。しかし、.data + .bss は既に (11780+86524)/1024 = 96kb であり、RAM がいっぱいであることを意味します (at32uc3b0512 -> 96kb SRAM)。しかし、アプリケーションは希望どおりに機能します。私が間違っている???

4

2 に答える 2

0

MCU 上のプログラムは、通常、FLASH に配置されます。

  • OSが存在する場合、これは当てはまりません
  • SDカードのような場所から実行時にプログラムをメモリにロードします
  • すべての MCU がそれを実行できるわけではありません
  • それはあなたの場合ではないと思います
  • プログラム フラッシュは 512 KB の大きさです (IC の番号から推測します)。

SDRAM は C エンジン/OS、スタックおよびヒープに使用されます。

  • あなたのチップには96キロバイトがあります
  • C エンジンは OS 処理のようなものです
  • 動的割り当て、ヒープ、スタック、サブルーチン呼び出し
  • コンパイル中に使用される RTL を含む
  • および未使用の割り込み用の粗いダミー割り込みサブルーチンの...

プログラムをELF/HEXにコンパイルするとき

  • コンパイラ/リンカーはあなただけに伝えます
  • プログラム コードとデータの大きさ (プログラム フラッシュ メモリに配置)
  • 静的変数の大きさ
  • 残りは実行時まで不明

したがって、使用するメモリの量を知る必要がある場合

  • 次に、ランタイムから抽出する必要があります
  • メモリ ステータスを取得する RTL 呼び出しによって
  • または、知識に基づいて自分で推定することによって
  • あなたのプログラムは何をしますか
  • 動的メモリの使用量
  • ヒープ/スタックの破棄/使用
  • 再帰レベルなど...
  • または、メモリ不足になるまで、メモリの割り当てを増やしていくことができます
  • 割り当てたチャンクの大きさを数えます
  • それからそれを粗く解放します
  • 使用されるメモリは次のとおりです。~ 96KB - altogether_allocated_memory
  • (+/-) 粒度 ...
于 2015-04-22T09:46:10.463 に答える