PROGMEM kullanmanın etkileri nelerdir?


12

Çok miktarda metin değişkeni ile, bunları PROGMEM kullanarak Flash bellekte saklamayı gerekli buldum . Büyük değişkenleri Flash'ta (PROGMEM kullanarak) vs SRAM vs EEPROM'u Arduino'da depolamanın olumlu ve olumsuz sonuçları nelerdir?

Yanıtlar:


10

Mevcut Arduino kartlarının çoğundaki mikrodenetleyici (Due, Leonardo, eski Arduinos ve diğer bazı uyumlu kartlar hariç) AtMega328'deki FLASH, EEPROM ve SRAM'ın hızlı bir karşılaştırması.

  • FLAŞ: 10.000 yazma / silme çevrimi. Erişim hızlı, ancak SRAM'den daha yavaş. Kod, üzerinden erişir PROGMEM.
  • EEPROM: 100.000 yazma / silme çevrimi. Erişim milisaniye içinde slooooooow. Nispeten karmaşık erişim prosedürü.
  • SRAM: Sınırsız yazma / silme döngüleri. Erişim çok hızlı, 2 saat döngü. Kod ile doğrudan erişim.

Dolayısıyla, PROGMEM kullanmanın temel varsayımsal olumsuz sonucu 10.000 yazma döngüsü sınırıdır. EEPROM kullanmanın temel olumsuz sonucu, verileri okumak / yazmak / kopyalamak için kod karmaşıklığıdır . SRAM, kapasitesi çok sınırlı .


EEPROM erişimi hakkında nereden bilgi edinebilirsiniz? Biraz itibaren seyir yaklaşık EEPROM gibi görünüyor okur ~ 5 saat döngüsü gibi almak bir şey. Yazma yavaş ama okuma değil.
Connor Wolf

OP birçok şeyi saklamak istiyor .
Anindo Ghosh

Evet, ama bu bir kez mi yazılıyor, çok mu okuyor yoksa ters mi? "Metin değişkenleri", derleme zamanında belirtilen, aygıta yazılan ve bundan sonra hiç değişmeyen (ör. Menü metni veya sommat) bir şeydir.
Connor Wolf

Okuduğum mağaza "derleme / yükleme zamanında store" gibi söz konusu. Değişken çalışma zamanında okuma / yazma kullanılacaksa, kesinlikle FLASH'da saklanmamalıdır. İlk önce tüm sayfayı silmeden FLASH'in değiştirilemeyeceği ek kısıtlama yok mu?
microtherion

... metin değişkenleri dize sabitleri değil.
Anindo Ghosh

2

Birincil ima, PROGMEM'de depolanan bilgileri değiştirememenizdir. Dizenin bir seferde 1 bayt kopyalanması gerektiğinden (çok küçük) bir performans isabeti de alırsınız.

FLASH'ın yıpranması (birincil) bir endişe değildir, çünkü programınızda değişiklik yapmak için FLASH'ı yeniden programlamanız gerekir.

IDE 1.x tanıtımı ile F () makrosu dahil edildi. Bu, dizeleri PROGMEM içinde tutmayı kolaylaştırır.

Örneğin: Serial.print ("Merhaba Dünya!");

Artık şunları kullanabilirsiniz:

Serial.print (F ("Merhaba Dünya!");

F () bir işlev değildir, sadece bir makro olduğundan, kullanımı biraz sınırlıdır.


1

PROGMEM en iyi değişmez veriler için kullanılır. Hızla değişen değişkenleri koruyacaksanız, bunu SRAM'de saklıyorum. Öte yandan, çok sık getirilmeyecek bazı değişmez metin değişkenlerine (örneğin, görüntülenecek şeyler) sahip olmak istiyorsanız, PROGMEM harika bir fikirdir.

EEPROM ile ilgili olarak - bunu kalıcı şeyler için kaydetmeye çalışın. IIRC, SRAM / PROGMEM üzerinden EEPROM'dan veri almak daha yavaştır. Genellikle (ve diğerleri) verileri kullanmadan önce EEPROM'dan SRAM'a kopyalarım ( resmi örnek bile bunu yapar).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.