Learning   Examples | Foundations | Hacking | Links

Memoria

Existen 3 fuentes de memoria en el microcontrolador utilizado por la placa Arduino (ATmega168):

  • Memoria Flash (espacio del programa), donde Arduino almacena el sketch.
  • SRAM (static random access memory, memoria estatica de acceso aleatorio) donde los sketches almacena y manipulan variables al ejecutarse.
  • EEPROM es un espacio de memoria que puede ser utilizada por los programadores para almacenar información de largo plazo.

La memoria Flash y EEPROM son no-volatiles (la información se mantiene en ellas luego de cortar la alimentación). SRAM es volatíl y se perdera al reiniciar la unidad.

El chip ATmega168 cuenta con las siguientes cantidades de memoria:

Flash  16k bytes (de los que 2k son utilizados por el bootloader)
SRAM   1024 bytes
EEPROM 512 bytes

Ten en cuenta que no hay mucha SRAM disponible. Es fácil utilizarla toda al tener muchas cadenas (strings) en tu programa. Por ejemplo, una declaración como:

char message[] = "Ah, qué hermoso..., qué hermoso."

pone 32 bytes en la SRAM (cada caracter utiliza un byte). Esto pude no parecer mucho, pero no toma mucho más llegar hasta 1024, especialmente si tienes largas cantidades de texto que enviar a una pantalla, o una tabla de datos muy grande, por ejemplo.

Si se te acaba la SRAM, tu programa fallara de manera improvista; parecera subir a la placa de manera correcta, pero no se ejecutara, o se ejecutara de manera extraña. Para comprobar si esto es lo que sucede, puedes intentar comentado o acortando las cadenas de texto u otras estructuras de datos en tu sketch (sin alterar el código). Si entonces este funciona correctamente, es probable que el problema haya sido la SRAM llena. Hay unas pocas cosas que puedes hacer para solucionar este problema:

  • Si tu sketch se comunica con una aplicación corriendo en un ordenador, puedes intentar trasladar datos o calculos al ordenador, reduciendo la carga en el Arduino.

  • Si tienes tablas de referencia o otros arreglos de gran tamaño, utiliza el tipo de datos mas pequeño que puedas para almacenar estos datos; por ejemplo, un int utliza 2 bytes, mientras que un byte utiliza solo uno (pero puede almacenar un rango menor de datos).

  • Si no necesitas modificar las cadenas o datos mientras el sketch se ejecuta, puedes almacenarlos en la memoria Flah (de programa) en vez de la SRAM; para esto, utiliza el keyword PROGMEM

  • If you don't need to modify the strings or data while your sketch is running, you can store them in flash (program) memory instead of SRAM; to do this, use the PROGMEM keyword.

Para utilizar la EEPROM, consulta la biblioteca EEPROM.

Fundamentos

Share