Muchas de las cosas de arduino se manejan debajo. Verá la cantidad de memoria FLASH que tomará un boceto (programa) en la compilación, pero no la cantidad de memoria SRAM. Recientemente tuve que descubrir esto también, y así es como lo hice.
En el directorio de arduino IDE está el compilador avr-gcc. También contiene una herramienta llamada 'avr-size'. Vaya a hardware / herramientas / avr / bin / y debería estar allí.
Al compilar, el IDE creará un directorio temporal en su directorio temporal y copiará todos los archivos C (++) en él. Compilará las bibliotecas, su boceto (también agrega las cosas necesarias para hacerlo funcional) y creará un archivo hexadecimal y elfo.
Lo que debe hacer es compilar su boceto (haciendo clic en Cargar o verificar) y buscar un directorio de compilación [etiqueta hash] en su carpeta temporal. Debe ejecutar avr-size.exe y entregarle el archivo elf.
Es un trabajo de consola bastante tedioso, pero generalmente navego a la carpeta bin, ejecuto avr-size.exe y escribo la ruta a mi carpeta temporal. Esto es C: \ Users [su nombre de usuario] \ AppData \ Local \ Temp \ build [etiqueta aleatoria] [nombre del bosquejo] .cpp.elf
(Windows 7)
Probablemente podrías crear un script (por lotes) para esto, pero como la carpeta de compilación permanece constante en cada sesión de arduino, no me molesto.
La salida de avr-size se ve muy similar a esto (he compilado un programa de ejemplo Xbee).
Donde:
- texto: datos flash utilizados para el código
- datos: memoria con datos inicializados (¡el valor inicial también debe almacenarse en FLASH!)
- bss: memoria que se inicializa con cero (el compilador agregará algo de código para que inicialice los datos & bss)
- dec & hex es una visualización decimal y hexadecimal del tamaño combinado de RAM y FLASH de su programa.
El IDE de Arduino que me informó que este programa tiene 3956 bytes de tamaño (FLASH). Eso está relacionado con 3924 (código flash) + 32 (valores RAM iniciales) = 3956 bytes FLASH.
El uso de RAM es data + bss combinado (!) = 32 + 320 = 352 bytes de uso de SRAM.
Tenga en cuenta que el ATMEGA328 solo tiene 2KiB de SRAM, y los problemas ya pueden ocurrir si está por debajo de eso (he tenido comportamientos inesperados a 1700 bytes de 2048).
El ATMEGA168 tiene 1KiB de SRAM. Todos los mega de Arduino tienen 8KiB de SRAM.
Como nota adicional. También hay un código de 'indicadores de memoria libre' disponible. Lo que hacen es tratar de asignar tanta memoria, contar el tamaño que tenía y liberarla (malloc () & free ()). Si inicialmente no ha usado malloc todavía, esto agregará más código a su programa para el que a veces no tiene espacio. Esto no es ideal y tampoco lo he encontrado para dar resultados estables. En mi propio proyecto tenía ethernet + xbee + tarjeta SD + código de biblioteca propio que se ejecutaba en un Atmega328. Simplemente no había suficiente SRAM disponible, y FLASH también se volvió escasa).
Y por último, pero no menos importante, este indicador no tiene en cuenta la memoria asignada con malloc ().