RAM使用情况AT32UC3B0512

时间:2015-04-08 13:54:48

标签: c embedded avr winavr

我正在寻找一种方法来查看运行在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)。但应用程序按预期工作。我错了???

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

MCU上的程序通常位于FLASH中

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

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

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

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

  • 编译器/链接器仅告诉您
  • 程序代码和数据有多大(位于程序FLASH存储器中)
  • 你有多大的静态变量
  • 其余部分在运行时本身之前是未知的

所以如果你需要知道你有多大的记忆

  • 然后你需要从运行时提取它
  • 通过一些RTL调用获取内存状态
  • 或根据
  • 的知识自行估算
  • 你的程序做什么
  • 使用了多少动态内存
  • 堆/堆栈废弃/使用
  • 递归级别等......
  • 或者你可以尝试越来越多地分配内存直到内存不足
  • 并统计你分配了多少大块
  • 然后释放它粗糙
  • 然后使用的内存为~ 96KB - altogether_allocated_memory
  • (+/-)粒度......