我正在为Arduino Due开发,它有 96k SRAM 和 512k 闪存用于代码。如果我有一个可以编译到 50k 的程序,那么当我运行代码时,我将使用多少 sram?我会立即使用 50k,还是只使用我调用的函数使用的内存?在我将草图上传到 arduino 之前,有没有办法测量这种内存使用情况?
问问题
1429 次
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
于 2013-10-25T07:47:48.710 回答
0
您的整个程序已加载到 arduino 中,因此将使用至少50K 闪存。然后在运行代码时,您将分配一些变量,一些在堆栈上,一些全局变量也将占用一些内存,但在 SRAM 上。
我不确定是否有办法准确测量所需的内存,但您可以根据代码中分配的变量的数量和类型进行粗略估计。请记住,在代码在 arduino 上运行的整个过程中,全局变量将占用空间,局部变量(在一对 {..} 中声明的变量)保留在内存中,直到 '}' 大括号也已知作为变量的范围。还要记住,您提到的编译后的 50K 代码只是代码部分,它不包括您的变量,甚至不包括全局变量。代码存储在闪存中,变量存储在 SRAM 中。变量仅在运行时开始占用内存。
我也很想知道你是如何计算你的代码使用 50K 内存的?
于 2013-10-24T22:57:05.880 回答