Diferencia entre revisiones de «memoria»

De ArduWiki
Saltar a: navegación, buscar
(Vea también)
 
(No se muestran 12 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
Hay tres grupos de memoria en el microcontrolador utilizado en las placas Arduino basadas en avr:
+
Hay tres grupos de memoria en el uC usado en las placas Arduino basadas en AVR:
  
 
* [[flash]] (espacio de programa), es donde se almacena el [[boceto]] Arduino.
 
* [[flash]] (espacio de programa), es donde se almacena el [[boceto]] Arduino.
Línea 7: Línea 7:
 
La memoria [[flash]] y la memoria [[EEPROM]] no son volátiles (la información persiste después de que se desconecta la alimentación). [[SRAM]] es volátil y se perderá cuando se apaga la corriente.
 
La memoria [[flash]] y la memoria [[EEPROM]] no son volátiles (la información persiste después de que se desconecta la alimentación). [[SRAM]] es volátil y se perderá cuando se apaga la corriente.
  
{| class="wikitable"
+
{| class="wikitable col3cen col4cen col5cen"
 
|+Memoria disponible
 
|+Memoria disponible
!Placa!!uC!!flash!!SRAM!!EEPROM
+
!Placa!!uC!![[flash]]!![[SRAM]]!![[EEPROM]]
 
|-
 
|-
 
|[[UNO]]||ATmega328||32KB||2KB||1KB
 
|[[UNO]]||ATmega328||32KB||2KB||1KB
 +
|-
 +
|[[NANO]]||ATmega328P||32KB||2KB||1KB
 
|-
 
|-
 
|[[MEGA]]||ATmega2560||256KB||8KB||4KB
 
|[[MEGA]]||ATmega2560||256KB||8KB||4KB
 
|}
 
|}
 +
 +
== Comentarios ==
 +
Si se queda sin [[SRAM]], su programa puede fallar de maneras inesperadas; parecerá que se carga con éxito, pero no se ejecuta o se ejecuta de forma extraña. Para comprobar si esto está sucediendo, puede intentar comentar o acortar cadenas u otras estructuras de datos en su [[boceto]] (sin cambiar el código). Si luego se ejecuta con éxito, probablemente se está quedando sin [[SRAM]].
 +
 +
Hay algunas cosas que puede hacer para resolver este problema:
 +
* Si su [[boceto]] habla con un programa que se ejecuta en una computadora, puede intentar transferir datos o cálculos a la computadora, reduciendo la carga en el Arduino.
 +
* Si tiene tablas de búsqueda u otras matrices grandes, use el tipo de datos más pequeño necesario para almacenar los valores que necesita; por ejemplo, un [[int]] ocupa 2 bytes (16 bits), mientras que un [[char]] o [[byte]] usa solo un byte (8 bits), pero almacenar un rango más pequeño de valores.
 +
* Si no necesita modificar las cadenas o datos mientras se ejecuta su boceto, puede almacenarlos en memoria [[flash]] (programa) en lugar de [[SRAM]]; para hacer esto, use la palabra clave [[PROGMEM]].
  
 
== Advertencias ==
 
== Advertencias ==
* as notas en esta página son para todas las tablas excepto [[DUE]], que tiene una arquitectura diferente.
+
* Las notas en esta página son para todas las tablas excepto [[DUE]], que tiene una arquitectura diferente.
 +
 
 +
== Ejemplo ==
 +
<syntaxhighlight lang="c++">
 +
for (byte i=0; i<10; i++){
 +
  free(matriz[i]);
 +
}
 +
free(matriz);
 +
</syntaxhighlight>
  
 
== Vea también ==
 
== Vea también ==
 +
* [[flash]]
 +
* [[SRAM]]
 +
* [[EEPROM]]
 
* [[IDE]]
 
* [[IDE]]
 
* [[boceto]]
 
* [[boceto]]
Línea 29: Línea 50:
 
* [https://www.arduino.cc/en/Tutorial/Memory Guia de referencia Arduino]
 
* [https://www.arduino.cc/en/Tutorial/Memory Guia de referencia Arduino]
  
[[Category:Referencias]]
+
[[Category:memoria]]

Revisión actual del 20:14 26 jun 2019

Hay tres grupos de memoria en el uC usado en las placas Arduino basadas en AVR:

  • flash (espacio de programa), es donde se almacena el boceto Arduino.
  • SRAM (memoria de acceso aleatorio estática) es donde el boceto crea y manipula variables cuando se ejecuta.
  • EEPROM es un espacio de memoria que los programadores pueden usar para almacenar información a largo plazo.

La memoria flash y la memoria EEPROM no son volátiles (la información persiste después de que se desconecta la alimentación). SRAM es volátil y se perderá cuando se apaga la corriente.

Memoria disponible
Placa uC flash SRAM EEPROM
UNO ATmega328 32KB 2KB 1KB
NANO ATmega328P 32KB 2KB 1KB
MEGA ATmega2560 256KB 8KB 4KB

Comentarios

Si se queda sin SRAM, su programa puede fallar de maneras inesperadas; parecerá que se carga con éxito, pero no se ejecuta o se ejecuta de forma extraña. Para comprobar si esto está sucediendo, puede intentar comentar o acortar cadenas u otras estructuras de datos en su boceto (sin cambiar el código). Si luego se ejecuta con éxito, probablemente se está quedando sin SRAM.

Hay algunas cosas que puede hacer para resolver este problema:

  • Si su boceto habla con un programa que se ejecuta en una computadora, puede intentar transferir datos o cálculos a la computadora, reduciendo la carga en el Arduino.
  • Si tiene tablas de búsqueda u otras matrices grandes, use el tipo de datos más pequeño necesario para almacenar los valores que necesita; por ejemplo, un int ocupa 2 bytes (16 bits), mientras que un char o byte usa solo un byte (8 bits), pero almacenar un rango más pequeño de valores.
  • Si no necesita modificar las cadenas o datos mientras se ejecuta su boceto, puede almacenarlos en memoria flash (programa) en lugar de SRAM; para hacer esto, use la palabra clave PROGMEM.

Advertencias

  • Las notas en esta página son para todas las tablas excepto DUE, que tiene una arquitectura diferente.

Ejemplo

for (byte i=0; i<10; i++){
   free(matriz[i]);
}
free(matriz);

Vea también

Referencias