我将在ARM板上使用多少SRAM?

时间:2013-10-24 22:34:53

标签: memory arduino

我正在开发Arduino Due,它有96k SRAM和512k闪存代码。如果我有一个程序可以编译成50k,当我运行代码时,我将使用多少sram?我会立即使用50k,还是仅使用我调用的函数使用的内存?在将草图上传到arduino之前,有没有办法测量这种内存使用情况?

3 个答案:

答案 0 :(得分:2)

你可以运行

arm-none-eabi-size bin.elf

其中:

  • bin.elf是生成的二进制文件(在编译日志中查找)
  • arm-none-eabi-size是Arduino for arm附带的工具,它可以让您知道二进制文件的内存分布。该程序可以在Arduino目录中找到。在我的Mac中,这是/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/g++_arm_none_eabi/bin

此命令将输出:

text       data     bss     dec     hex filename
9648          0    1188   10836    2a54 /var/folders/jz/ylfb9j0s76xb57xrkb605djm0000gn/T/build2004175178561973401.tmp/sketch_oct24a.cpp.elf

data + bss是RAM,text是程序存储器。

非常重要:这不考虑动态内存(在堆栈中创建),这只是静态和全局变量的RAM内存。还有其他技术可以动态检查RAM使用情况,例如this one,但这取决于您使用的编译器套件的链接器功能。

答案 1 :(得分:0)

您的整个程序已加载到arduino中,因此将使用至少 50K闪存。然后在运行代码时,你将分配一些变量,一些在堆栈上,一些是全局的,它们也会在SRAM上占用一些内存。

我不确定是否有办法准确测量所需的内存,但您可以根据代码中分配的变量的数量和类型进行粗略估计。请记住,全局变量将在代码在arduino上运行的整个时间内占用空间,局部变量(在一对{..}中声明的变量)保留在内存中,直到'}'大括号也知道作为变量的范围。还要记住,你提到的编译后的50K代码只是代码部分,它不包括你的变量,甚至不包括全局变量。代码存储在闪存中,变量存储在SRAM中。变量仅在运行时开始占用内存。

我还想知道你是如何计算代码使用50K内存的吗?

答案 2 :(得分:0)

这是一个输出可用RAM内存的小库。 当我的程序崩溃而代码中没有错误时,我经常使用它。原来我的RAM用完了。 所以它非常方便!

Avalaible Memory Library

希望它有所帮助! :)