Com grandes quantidades de variáveis de texto, achei necessário armazená-las na memória Flash usando PROGMEM . Quais são as consequências positivas e negativas do armazenamento de grandes variáveis no Flash (usando PROGMEM) vs SRAM vs EEPROM no Arduino?
12
A implicação principal é que você não pode modificar as informações armazenadas no PROGMEM. Você também receberá um desempenho (muito pequeno), pois a cadeia precisa ser copiada 1 byte de cada vez.
O desgaste do FLASH não é uma preocupação (principal), pois para fazer alterações no seu programa você teria que reprogramar o FLASH de qualquer maneira.
Com a introdução do IDE 1.x, a macro F () foi incluída. Isso facilita manter as strings no PROGMEM.
Por exemplo, em vez de usar: Serial.print ("Hello World!");
Agora você pode usar:
Serial.print (F ("Olá, mundo!");
Observe que F () não é uma função, é apenas uma macro, portanto seu uso é um pouco limitado.
fonte
O PROGMEM é melhor usado para dados imutáveis. Se você vai continuar mudando rapidamente as variáveis, eu apenas as armazeno na SRAM. Por outro lado, se você quiser ter algumas variáveis de texto imutáveis (por exemplo, itens a serem exibidos) que não serão buscadas com muita frequência, PROGMEM é uma ótima idéia.
Em relação à EEPROM - tente salvar isso para coisas persistentes. No IIRC, é mais lento buscar dados da EEPROM sobre SRAM / PROGMEM. Geralmente eu (e outros) copiamos dados da EEPROM para a SRAM (até o exemplo oficial faz isso) antes de usá-los.
fonte