【问题标题】:How much SRAM will I use on my ARM board?我将在我的 ARM 板上使用多少 SRAM?
【发布时间】:2013-10-24 22:34:52
【问题描述】:

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

【问题讨论】:

    标签: memory arduino


    【解决方案1】:

    你可以跑

    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,但这取决于您使用的编译器套件的链接器功能。

    【讨论】:

    • heap 在这里是一个错误的词,对吧?因为 data 和 bss 段都用于存储全局变量。堆内存是发生动态分配的区域(例如在 C malloc 中),它再次完全取决于程序的运行时行为。
    【解决方案2】:

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

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

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

    【讨论】:

    • 我从 matrixssl 主页获得了“50k”数字,该主页自豪地声称他们的“足迹”小于 50kb。在我尝试为 arduino 编译它之前,我想知道这如何转化为实际的 SRAM 使用。
    【解决方案3】:

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

    Avalaible Memory Library

    希望对您有所帮助! :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      相关资源
      最近更新 更多