Memory

Bu sayfadaki notlar, farklı bir mimariye sahip olan Due hariç tüm panolara yöneliktir.

Avr tabanlı Arduino kartlarında kullanılan mikro denetleyicide üç bellek havuzu vardır:

  • Flash bellek (program alanı), Arduino çiziminin saklandığı yerdir.
  • SRAM (statik rasgele erişim belleği), çizim çalışırken değişkenleri oluşturduğu ve işlediği yerdir.
  • EEPROM, programcıların uzun vadeli bilgileri depolamak için kullanabilecekleri bellek alanıdır.

Flash bellek ve EEPROM bellek geçici değildir (güç kapatıldıktan sonra bilgi devam eder). SRAM uçucudur ve güç çevrildiğinde kaybolacaktır.

Uno'da bulunan ATmega328 çipi aşağıdaki bellek miktarına sahiptir:

Flash 32k bytes (of which .5k is used for the bootloader) SRAM 2k bytes EEPROM 1k byte

Mega2560'taki ATmega2560'ın daha geniş bellek alanı var:

Flash 256k bytes (of which 8k is used for the bootloader) SRAM 8k bytes EEPROM 4k byte

Uno'da çok fazla SRAM bulunmadığına dikkat edin. Programınızda çok sayıda dizge kullanarak hepsini kullanmak kolaydır. Örneğin, aşağıdaki gibi bir bildiri:

char message [] = "Cape Wind projesini destekliyorum.";

SRAM'a 33 bayt koyar (her karakter bir bayt, artı '\ 0' sonlandırıcı alır). Bu çok fazla görünmeyebilir, ancak özellikle bir ekrana göndermek için büyük miktarda metniniz veya büyük bir arama tablosunuz varsa, 2048'e ulaşmak uzun sürmez.

SRAM'iniz biterse, programınız beklenmedik şekillerde başarısız olabilir; başarılı bir şekilde yükleniyor gibi görünecek, ancak çalıştırılmayacak veya garip bir şekilde çalışmayacak. Bunun olup olmadığını kontrol etmek için, çiziminizdeki dizeleri veya diğer veri yapılarını yorumlamayı veya kısaltmayı deneyebilirsiniz (kodu değiştirmeden). Daha sonra başarıyla çalışırsa, muhtemelen SRAM'iniz bitiyor demektir. Bu sorunu çözmek için yapabileceğiniz birkaç şey vardır:

  • Çiziminiz (masaüstü / dizüstü bilgisayar) bilgisayarda çalışan bir programla konuşuyorsa, verileri veya hesaplamaları bilgisayara kaydırmayı deneyerek Arduino'daki yükü azaltabilirsiniz.

  • Arama tablolarınız veya diğer büyük dizileriniz varsa, ihtiyacınız olan değerleri depolamak için gereken en küçük veri türünü kullanın; örneğin, bir int iki bayt alır, bir bayt ise yalnızca bir bayt kullanır (ancak daha küçük bir değer aralığı saklayabilir).

  • Çiziminiz çalışırken dizeleri veya verileri değiştirmeniz gerekmiyorsa, bunları SRAM yerine flash (program) belleğinde saklayabilirsiniz; bunu yapmak için PROGMEM anahtar sözcüğünü kullanın.

EEPROM'u kullanmak için EEPROM kütüphanesine bakın .

temeller