Diferencia entre revisiones de «SRAM»
(→Referencias) |
(→Referencias) |
||
Línea 35: | Línea 35: | ||
== Referencias == | == Referencias == | ||
− | * [https://www.luisllamas.es/guardar-variables-entre-reinicios-con-arduino-y-la-memoria-no-volatil-eeprom/ Luis Llamas] | + | * [https://www.luisllamas.es/guardar-variables-entre-reinicios-con-arduino-y-la-memoria-no-volatil-eeprom/ Variables y memoria no volatil] - Luis Llamas |
+ | * [https://programarfacil.com/blog/tipos-de-memoria/ Tipos de memoria] - Luis Del Valle | ||
[[Category:Estructura]] | [[Category:Estructura]] |
Revisión del 23:12 5 may 2019
Contenido
Descripción
La Static Random Access Memory es volatil y es donde se almacena los registros, las variables locales y datos parciales. Es la zona de memoria donde el boceto crea y manipula las variables cuando se ejecuta. Es la mas rápida y la unica que puede se escrita desde el boceto en ejecución.
Es un recurso escaso que debe gestionarse, especialmente si usamos cadenas de caracteres de forma intensiva. Si un Arduino se queda sin memoria RAM, el boceto compila bien y se cargará en el Arduino sin problema, pero se producirán efectos de respuesta inesperados. En caso que necesites muchas cadenas, una técnica para evitar agotar la memoria SRAM es guardar en la memoria flash las cadenas que no se modifiquen en tiempo de ejecución, usando PROGMEM osea F().
Es usada para los siguientes propósitos:
- Static Data
- Este bloque de memoria es reservado en la RAM para todas las variables globales y estáticas. Para cada variable que es definida se separa el espacio adecuado según el tipo sin importar si se usa o no. Luego Arduino copiara los valores iniciales desde el boceto compilado en la flash.
- Heap
- Este bloque es usado para las variables o elementos que asignan memoria dinámicamente. Crece desde el final de la zona de Static Data a medida que la memoria es asignada. Usada por elementos como los objetos y vectores/matrices creados por objetos (String es un ejemplo de ello) o variables locales.
- Stack
- Este bloque es usado por las variables locales y para mantener un registro de las interrupciones y las llamadas a funciones. La pila crece desde la zona más alta de memoria hacia el bloque Heap. Cada interrupción, llamada de una función o llamada de una variable local produce el crecimiento de esta memoria.
La mayor parte de los problemas ocurren cuando los bloques Heap y Stack colisionan. Cuando esto ocurre uno o ambas bloques de memoria se corrompen con resultados impredecibles. En uno casos se produce un “cuelgue” del Arduino o resultados impredescibles.
Nota: Luego de compilar el bocetos, desde la versión 1.6 del IDE, Arduino informa sobre el tamaño de la SRAM que sera ocupado por variables globales, es decir el bloque static data.
Tipo | Arduino UNO | Arduino MEGA | Arduino MKR1000 |
---|---|---|---|
flash | 32K | 256K | 256K |
Flash-bootloader | 0.5K | 8K | - |
SRAM | 2K | 8K | 32K |
EEPROM | 1K | 4K | - |
Ejemplo
Vea también
Referencias
- Variables y memoria no volatil - Luis Llamas
- Tipos de memoria - Luis Del Valle