2

我正在寻找一种方法来查看在 at32uc3b0512 上运行的应用程序的 RAM 使用情况。

arv32-size.exe foo.elf 告诉我:

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

根据“谷歌”,RAM 使用量为 .data + .bss。但是 .data + .bss 已经是 (11780+86524)/1024 = 96kb,这意味着我的 RAM 已满(at32uc3b0512 -> 96kb SRAM)。但是该应用程序可以按需要工作。我错了吗???

4

2 回答 2

2

您使用的芯片有 96kB 的 RAM,这也是您的 .bss 和 .data 部分的总和。这并不意味着您的所有 RAM 都已用完,而只是显示 RAM 是如何分配的。

于 2015-04-09T00:48:59.807 回答
0

MCU上的程序通常位于FLASH

  • 如果您有一些操作系统,这不是真的
  • 并在运行时从 SD 卡之类的地方将程序加载到内存
  • 并非所有 MCU 都能做到这一点
  • 我怀疑这不是你的情况
  • 程序 Flash 有 512 KB 大(我从你的 IC 编号猜测)

SDRAM 用于 C 引擎/OS、堆栈和堆

  • 你的芯片有 96 KB
  • C引擎类似于操作系统处理
  • 动态分配、堆、栈、子程序调用
  • 并包括编译期间使用的 RTL
  • 和粗略的虚拟中断子程序,用于未使用的中断......

当您将程序编译为 ELF/HEX 时

  • 编译器/链接器只告诉你
  • 程序代码和数据有多大(位于程序闪存中)
  • 你有多大的静态变量
  • 其余的直到运行时本身才知道

所以如果你需要知道你占用了多少内存

  • 那么你需要从运行时中提取它
  • 通过一些 RTL 调用来获取内存状态
  • 或根据以下知识自行估算
  • 你的程序做什么
  • 使用了多少动态内存
  • 堆/堆栈垃圾/使用
  • 递归级别等...
  • 或者您可以尝试越来越多地分配内存,直到内存不足
  • 并计算你总共分配了多少块
  • 然后释放它的粗
  • 然后使用的内存是~ 96KB - altogether_allocated_memory
  • (+/-) 粒度...
于 2015-04-22T09:46:10.463 回答