1

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

4

3 回答 3

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 使用情况,例如这个,但它取决于您正在使用的编译器套件的链接器功能。

于 2013-10-24T22:58:42.503 回答
0

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

可用内存库

希望能帮助到你!:)

于 2013-10-25T07:47:48.710 回答
0

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

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

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

于 2013-10-24T22:57:05.880 回答