Маючи велику кількість текстових змінних, я вважаю за необхідне зберігати їх у флеш-пам’яті за допомогою PROGMEM . Які позитивні та негативні наслідки зберігання великих змінних у Flash (за допомогою PROGMEM) проти SRAM проти EEPROM на Arduino?
Маючи велику кількість текстових змінних, я вважаю за необхідне зберігати їх у флеш-пам’яті за допомогою PROGMEM . Які позитивні та негативні наслідки зберігання великих змінних у Flash (за допомогою PROGMEM) проти SRAM проти EEPROM на Arduino?
Відповіді:
Ось короткий порівняння FLASH, EEPROM та SRAM на AtMega328, мікроконтролера багатьох сучасних плат Arduino (виключаючи Due, Leonardo, старший Arduinos та деякі інші сумісні плати).
PROGMEM
.Отже, ключовим гіпотетичним негативним наслідком використання PROGMEM є межа 10 000 циклу запису . Основним негативним наслідком використання EEPROM є складність коду для читання / запису / копіювання даних. SRAM, це просто дуже обмежена потужність .
Основне значення полягає в тому, що ви не можете змінювати інформацію, що зберігається в PROGMEM. Ви також візьмете (дуже невеликий) показник продуктивності, оскільки рядок потрібно скопіювати за один байт.
Знос FLASH не є основною проблемою, оскільки для внесення змін у програму вам доведеться все-таки перепрограмувати FLASH.
З введенням IDE 1.x був включений макрос F (). Це полегшує збереження рядків у програмі PROGMEM.
Наприклад, замість використання: Serial.print ("Привіт, світ!");
Тепер ви можете використовувати:
Serial.print (F ("Привіт, світ!");
Зауважте, що F () не є функцією, це лише макрос, тому його використання дещо обмежене.
PROGMEM найкраще використовувати для незмінних даних. Якщо ви збираєтеся зберігати змінні змінні, я б просто зберігав їх у SRAM. З іншого боку, якщо ви хочете мати деякі незмінні текстові змінні (наприклад, речі, які потрібно відображати), які не будуть вибиратися занадто часто, PROGMEM - це чудова ідея.
Щодо EEPROM - спробуйте зберегти це для постійних речей. IIRC повільніше отримувати дані з EEPROM через SRAM / PROGMEM. Зазвичай я (та інші) копіюю дані з EEPROM на SRAM (навіть офіційний приклад робить це) перед тим, як використовувати їх.