Dengan sejumlah besar variabel teks, saya merasa perlu untuk menyimpannya dalam memori Flash menggunakan PROGMEM . Apa konsekuensi positif dan negatif dari menyimpan variabel besar di Flash (menggunakan PROGMEM) vs SRAM vs EEPROM di Arduino?
Dengan sejumlah besar variabel teks, saya merasa perlu untuk menyimpannya dalam memori Flash menggunakan PROGMEM . Apa konsekuensi positif dan negatif dari menyimpan variabel besar di Flash (menggunakan PROGMEM) vs SRAM vs EEPROM di Arduino?
Jawaban:
Berikut ini adalah perbandingan cepat FLASH, EEPROM dan SRAM pada AtMega328, mikrokontroler di banyak papan Arduino saat ini (tidak termasuk Due, Leonardo, Arduino lama dan beberapa papan kompatibel lainnya).
PROGMEM
.Jadi, konsekuensi negatif utama hipotetis dari penggunaan PROGMEM adalah 10.000 siklus siklus tulis . Konsekuensi negatif utama dari menggunakan EEPROM adalah kompleksitas kode untuk membaca / menulis / menyalin data. SRAM, kapasitasnya sangat terbatas .
Implikasi utamanya adalah Anda tidak dapat mengubah informasi yang disimpan dalam PROGMEM. Anda juga akan mendapatkan hit kinerja (sangat kecil) karena string harus disalin 1 byte pada suatu waktu.
Keausan FLASH bukan masalah (utama) karena untuk membuat perubahan pada program Anda, Anda harus memprogram ulang FLASH.
Dengan pengenalan IDE 1.x, makro F () disertakan. Ini membuatnya lebih mudah untuk menjaga string dalam PROGMEM.
Misalnya alih-alih menggunakan: Serial.print ("Hello World!");
Anda sekarang dapat menggunakan:
Serial.print (F ("Hello World!");
Perhatikan, bahwa F () bukan fungsi, itu hanya makro sehingga penggunaannya agak terbatas.
PROGMEM paling baik digunakan untuk data yang tidak dapat diubah. Jika Anda akan terus mengubah variabel dengan cepat, saya hanya akan menyimpannya di SRAM. Di sisi lain, jika Anda ingin memiliki beberapa variabel teks yang tidak dapat diubah (mis. Hal-hal yang akan ditampilkan) yang tidak akan terlalu sering diambil, PROGMEM adalah ide yang bagus.
Mengenai EEPROM - cobalah untuk menyimpan ini untuk hal-hal yang persisten. IIRC lebih lambat untuk mengambil data dari EEPROM melalui SRAM / PROGMEM. Biasanya saya (dan lainnya) menyalin data dari EEPROM ke SRAM (Bahkan contoh resmi melakukan ini) sebelum menggunakannya.