Przy dużej ilości zmiennych tekstowych uważam za konieczne przechowywanie ich w pamięci Flash za pomocą PROGMEM . Jakie są pozytywne i negatywne konsekwencje przechowywania dużych zmiennych we Flashu (przy użyciu PROGMEM) vs SRAM vs EEPROM na Arduino?
12
Podstawową implikacją jest to, że nie można modyfikować informacji przechowywanych w PROGMEM. Weźmiesz także (bardzo małe) działanie, ponieważ ciąg musi być kopiowany 1 bajt na raz.
Zużycie FLASH nie jest (pierwotne) problemem, ponieważ aby wprowadzić zmiany w programie, musisz przeprogramować FLASH.
Wraz z wprowadzeniem IDE 1.x dołączono makro F (). Ułatwia to utrzymywanie ciągów w PROGMEM.
Na przykład zamiast używać: Serial.print („Hello World!”);
Możesz teraz użyć:
Serial.print (F („Hello World!”);
Zauważ, że F () nie jest funkcją, jest tylko makrem, więc jej użycie jest nieco ograniczone.
źródło
PROGMEM najlepiej nadaje się do niezmiennych danych. Jeśli zamierzasz szybko zmieniać zmienne, po prostu zapisałbym je w SRAM. Z drugiej strony, jeśli chcesz mieć niezmienne zmienne tekstowe (np. Rzeczy do wyświetlenia), które nie będą pobierane zbyt często, PROGMEM to świetny pomysł.
Jeśli chodzi o EEPROM - spróbuj zapisać to dla trwałych rzeczy. IIRC pobieranie danych z EEPROM przez SRAM / PROGMEM jest wolniejsze. Zwykle (i inne) kopiuję dane z EEPROM do SRAM (nawet oficjalny przykład to robi) przed ich użyciem.
źródło