Con grandes cantidades de variables de texto, he encontrado que es necesario almacenarlas en la memoria Flash usando PROGMEM . ¿Cuáles son las consecuencias positivas y negativas de almacenar grandes variables en Flash (usando PROGMEM) vs SRAM vs EEPROM en el Arduino?
12
La implicación principal es que no puede modificar la información almacenada en PROGMEM. También recibirá un golpe de rendimiento (muy pequeño) ya que la cadena debe copiarse 1 byte a la vez.
El desgaste del FLASH no es una preocupación (principal) ya que para realizar cambios en su programa, de todos modos, tendría que reprogramar el FLASH.
Con la introducción IDE 1.x se incluyó la macro F (). Esto facilita mantener cadenas en PROGMEM.
Por ejemplo, en lugar de usar: Serial.print ("Hello World!");
Ahora puedes usar:
Serial.print (F ("¡Hola, mundo!");
Tenga en cuenta que F () no es una función, es solo una macro, por lo que su uso es algo limitado.
fuente
PROGMEM se utiliza mejor para datos inmutables. Si va a seguir cambiando rápidamente las variables, simplemente lo almacenaría en la SRAM. Por otro lado, si desea tener algunas variables de texto inmutables (por ejemplo, cosas para mostrar) que no se recuperarán con demasiada frecuencia, PROGMEM es una gran idea.
Con respecto a EEPROM, intente guardar esto para cosas persistentes. IIRC es más lento para obtener datos de EEPROM sobre SRAM / PROGMEM. Por lo general, yo (y otros) copio datos de EEPROM a SRAM (incluso el ejemplo oficial hace esto) antes de usarlo.
fuente