С большим количеством текстовых переменных я счел необходимым хранить их во флэш-памяти с помощью PROGMEM . Каковы положительные и отрицательные последствия хранения больших переменных во Flash (используя PROGMEM) против SRAM против EEPROM на Arduino?
12
Основным последствием является то, что вы не можете изменить информацию, хранящуюся в PROGMEM. Вы также получите (очень маленький) удар по производительности, так как строка должна копироваться по 1 байту за раз.
Износ FLASH не является (основной) проблемой, поскольку для внесения изменений в вашу программу вам все равно придется перепрограммировать FLASH.
С введением IDE 1.x был включен макрос F (). Это облегчает хранение строк в PROGMEM.
Например, вместо использования: Serial.print ("Hello World!");
Теперь вы можете использовать:
Serial.print (F («Привет, мир!»);
Обратите внимание, что F () не функция, это просто макрос, поэтому его использование несколько ограничено.
источник
PROGMEM лучше всего использовать для неизменных данных. Если вы собираетесь хранить быстро меняющиеся переменные, я бы просто сохранил их в SRAM. С другой стороны, если вы хотите иметь некоторые неизменяемые текстовые переменные (например, материал для отображения), который не будет выбираться слишком часто, PROGMEM - отличная идея.
Что касается EEPROM - попытайтесь сохранить это для постоянных вещей. IIRC медленнее извлекает данные из EEPROM через SRAM / PROGMEM. Обычно я (и другие) копирую данные из EEPROM в SRAM (даже официальный пример делает это) перед их использованием.
источник