Arduino "Sketch is too big!" hatası, seçili kart için derlenen sketch'in kullanılabilir program belleği sınırını aşmasıyla oluşur. Program belleği karta yüklenecek kodu ve derlenmiş çıktıyı taşırken RAM/SRAM, kod çalışırken değişen veriler için kullanılır. Çözüm, önce seçili kartı ve derleme hedefini doğrulamak, ardından derleme çıktısında hangi bellek satırının kendi üst sınırını aştığını bulmakla başlar.
Arduino "Sketch is too big!" Hatası Ne Anlama Gelir?
Arduino'da yazdığın kaynak kod, doğrudan karta gönderilmez. Sketch önce derlenir, kullanılan kütüphanelerle birleştirilir ve karta yazılacak ikili çıktı oluşturulur. "Sketch is too big!" mesajı, bu son çıktının seçili kartın program belleğinde ayrılan alana sığmadığını anlatır. Bu nedenle yalnızca .ino dosyasının satır sayısına veya bilgisayardaki dosya boyutuna bakmak yeterli değildir.
Aynı sketch, farklı bir kart seçildiğinde farklı sonuç verebilir. Çünkü her kartın donanımı, kart platformu ve derleme ayarları program belleği ile çalışma belleği için farklı sınırlar tanımlayabilir. Bu yüzden çözüm aramaya başlamadan önce fiziksel olarak kullandığın kartı Arduino IDE içindeki seçili kartla karşılaştırmalısın. Yanlış kart seçimi, gerçek donanımın kapasitesini değil, seçilen derleme hedefinin sınırlarını kullanır.
Program belleği ile RAM/SRAM aynı değildir
Program belleği, derlenmiş kodun karta yüklenmesi için kullanılan alandır. Fonksiyonların makine koduna dönüşmüş hâli ve derleme sonucunda programa dâhil edilen bazı sabit içerikler bu alanla ilişkilidir. RAM veya kartın mimarisine göre kullanılan adıyla SRAM ise program çalışırken değişen değişkenler, diziler, tamponlar ve geçici çalışma verileri için kullanılır.
Bu ayrım, uygulanacak çözümü doğrudan değiştirir. Program belleği dolduysa gereksiz kodu, kullanılmayan kütüphaneleri veya fazla metinleri incelemek gerekir. RAM/SRAM sorunu varsa değişkenlerin, dizilerin ve çalışma sırasında ayrılan alanların kullanımına bakılır. RAM'i azaltan bir değişiklik, program belleği sınırını otomatik olarak düşürmeyebilir.
Derleme Çıktısı Nasıl Okunur ve Hangi Belleğin Dolduğu Nasıl Anlaşılır?

Arduino IDE, derleme sonunda sketch'in kullandığı depolama alanını ve çalışma belleği kullanımını konsolda gösterir. Çıktı etiketleri kullanılan IDE'ye, karta ve kart platformuna göre değişebilir. program storage space, program memory, dynamic memory veya static RAM gibi ifadeler görebilirsin. Mesajın tam biçimi değişse bile temel yöntem aynıdır: kullanılan değeri, aynı satırdaki izin verilen üst sınırla karşılaştır.
Program belleği satırında genellikle Sketch uses ile başlayan kullanılan alan ve Maximum is ile belirtilen üst sınır bulunur. Kullanılan alan üst sınırı geçiyorsa sorun program belleğindedir. RAM/SRAM tarafında ise Global variables use veya benzer bir satır, global değişkenlerin ne kadar çalışma belleği kullandığını ve yerel değişkenler için ne kadar alan kaldığını gösterir. Derleme başarısız olduğunda ilk olarak sınırı aşan satır dikkate alınmalıdır.
Derleme çıktısından koda ilerlemek için şu karar ağacını kullanabilirsin:
- Seçili kartı ve derleme hedefini doğrula. Fiziksel kartın Arduino IDE'de seçili olan kartla aynı olduğundan ve doğru kart platformunun kullanıldığından emin ol. Bu seçim, derlemede kullanılacak bellek sınırlarını etkiler.
- Program belleği satırını kontrol et. Kullanılan program belleğini
Maximum issonrasındaki üst sınırla karşılaştır. Aşım varsa önce kod, metinler, kütüphaneler ve programa eklenen özellikler incelenmelidir. - Çalışma zamanındaki RAM belirtilerini ayrı değerlendir. Dynamic memory veya static RAM satırında kullanılan alanı, kalan alanı ve üst sınırı kontrol et. Program belleği uygun görünse bile RAM tarafında çok az alan kalmış olabilir.
- Müdahaleyi doğru belleğe eşleştir. Program belleği aşıldıysa sketch'in derlenmiş boyutunu küçültecek değişikliklere, RAM/SRAM sorunu varsa değişken ve tampon kullanımına odaklan. "Sketch is too big!" ifadesini tek başına teşhis olarak değil, doğru bellek satırını incelemeye yönlendiren bir sonuç mesajı olarak değerlendir.
Bu yöntem, hata metninin farklı göründüğü durumlarda da işe yarar. Örneğin bazı derlemelerde text section exceeds available space in board veya data section exceeds available space in board gibi ifadeler görülebilir. Tam ifadeye takılmak yerine seçili kartı, kullanılan değeri ve üst sınırı birlikte okumak daha güvenilir bir başlangıç sağlar.
Hata İçin Çözüm Sırası: Kodu Hangi Adımlarla Küçültmeli?

Her değişiklikten sonra aynı kart seçiliyken yeniden derle. Böylece hangi düzenlemenin program belleği kullanımını etkilediğini görebilirsin. Arduino’nun AVR derleme süreci açıklaması, bir kütüphanenin yalnızca kodun ihtiyaç duyduğu bölümlerinin son dosyaya alınabildiğini belirtir. Bu yüzden kullanılmayan bir #include satırını kaldırmak her zaman bellek kazandırmaz.
- Başlangıcı kaydet: Seçili kartı kontrol et, ilk derlemeyi yap ve çıktıda kullanılan program belleği ile izin verilen üst sınırı not al.
- Bağımlılıkları incele: Kullanılmayan
#includesatırlarını ve artık gerekli olmayan kütüphane kullanımlarını ayır. Gerekli bir satırı kaldırmamaya dikkat et. Değişiklikten sonra yeniden derle ve sonucu karşılaştır. - Metinleri sadeleştir: Uzun sabit mesajlarda gereksiz sözcükleri ve tekrarlanan dizeleri ara. Mesajın başka bir işlem tarafından aynen okunması gerekiyorsa içeriğini değiştirme. Düzenlemeden sonra yeniden derle.
- Kodun yapısını gözden geçir: Kullanılmayan veri yapılarını ve aynı işi yapan tekrar eden kodu incele. Çalışma biçimini koruyacak küçük bir değişiklik yap, ardından yeniden derle.
- Sonucu denetle: Programın beklenen davranışını kontrol et. Son derlemede kullanılan program belleğini hem başlangıç değeriyle hem de seçili kart için gösterilen üst sınırla karşılaştır. Bir değişiklik yarar sağlamadıysa onu yalnızca bellek kazanımı gerekçesiyle tutma.
Kısa Arduino Kodu: Metni Kısaltma ve Kullanılmayan Satırı Kaldırma
Aşağıdaki iki ayrı .ino sürümü, Arduino Uno ve Arduino AVR Boards paketi için hazırlanmıştır. Pakette Wire.h başlığı bulunur; ancak örnek kod bu kütüphanenin hiçbir işlevini kullanmaz. Her sürümü ayrı ayrı derleyip aynı kartın çıktılarıyla karşılaştır.
İlk sürüm: Kullanılmayan başlık ve uzun bir seri mesajı içerir.
#include <Wire.h>
void setup() {
Serial.begin(9600);
Serial.println("Cihaz hazir. Hazirlik bitti. Kullanima hazir.");
}
void loop() {
}
Beklenen durum, derlemenin tamamlanması ve seri ekranda Cihaz hazir. Hazirlik bitti. Kullanima hazir. mesajının bir kez görünmesidir. Derleme çıktısındaki kullanılan program belleğini ve izin verilen üst sınırı kaydet; RAM kullanımını ayrı bir değer olarak değerlendir.
İkinci sürüm: Kullanılmayan satır kaldırılmış, mesajın temel bilgisi korunarak metin kısaltılmıştır.
void setup() {
Serial.begin(9600);
Serial.println("Cihaz hazir.");
}
void loop() {
}
Bu sürümün de derlenmesi ve seri ekranda Cihaz hazir. mesajını bir kez göstermesi beklenir. Kullanılan program belleğini ilk sürümle ve aynı üst sınırla karşılaştır. Metni kısaltmak kullanımı azaltabilir; yalnızca kullanılmayan başlığı kaldırmak ise sonucu değiştirmeyebilir veya derleme ortamına bağlı bir fark oluşturabilir. Mesajı aynen bekleyen başka bir bileşen varsa bu kısaltma o proje için uygun değildir.
RAM'i Azaltan Değişiklik Bu Hatayı Neden Çözmeyebilir?
“Sketch is too big!” ifadesi tek başına RAM’in dolduğunu göstermez. Program belleği, derlenmiş kod ve ilgili sabit veriler için kullanılan alanı; RAM veya SRAM ise değişkenler, diziler, tamponlar ve çalışma sırasında kullanılan verileri ifade eder. Derleme çıktısı bu alanları ayrı satırlarda raporladığı için teşhis, hata başlığından değil kullanılan ve izin verilen değerlerin karşılaştırılmasından yapılmalıdır.
Program belleği satırındaki kullanılan değer sınırı aşıyorsa yalnızca RAM’i küçülten bir değişiklik hatayı çözmeyebilir. Büyük bir veri dizisini küçültmek veya çalışma sırasında kullanılan tamponu azaltmak RAM/SRAM kullanımını hedefler; buna karşılık Sketch uses ... program storage space değeri aynı kalabilir. Büyük bir sabit metni kısaltmak ya da sabit verinin yerleşimini değiştirmek ise kart mimarisine ve kodun kullanım biçimine bağlı olarak farklı bellek değerlerini etkileyebilir. Sonucu tahmin etmek yerine her değişiklikten sonra yeniden derleme yapılmalıdır.
Kullanılmayan bir kütüphane satırını, örneğin #include satırını silmek de her zaman fark yaratmaz. Kütüphanenin ihtiyaç duyulmayan bölümleri son derlemeye zaten alınmıyorsa program boyutu aynı kalabilir. Değişiklik, gerçekten kullanılan kodu, kütüphaneye ait global verileri veya başlatma işlemlerini etkiliyorsa sonuç derleme çıktısında görülür. Arduino’nun derleme açıklamasına göre kütüphanelerin yalnızca ihtiyaç duyulan bölümleri son dosyaya eklenebilir.
Pratik karar sırası şöyledir: Sketch uses değeri sınırdaysa kodu, kütüphaneleri ve metinleri incele; Global variables use değeri yüksekse veri yapılarını ve tamponları incele; iki değer de yükseliyorsa değişikliğin hangi belleği etkilediğini ayrı ayrı kontrol et. Kart modeli bilinmiyorsa başka bir kartın kapasitesini referans alma.
Kısa kontrol: Tek değişiklik yap, yeniden derle, programın işlevini test et, kullanılan ve izin verilen değerleri karşılaştır.
Sık Sorulan Sorular
“Sketch is too big!” hatası RAM’in dolduğunu mu gösterir?
Hayır, tek başına göstermez. Sketch uses satırında program belleği sınırı, Global variables use satırında ise dinamik bellek kullanımı incelenir. Hangi değerin sınırı aştığına göre program belleği veya RAM/SRAM teşhisi yapılır.
Kart modeli bilinmeden program belleği sınırı nasıl okunur?
Arduino IDE’de seçili kartla yapılan derlemenin sonunda görünen Maximum is ... değerini kullan. Başka bir kartın kapasitesini varsaymak yerine aynı derleme çıktısındaki kullanılan ve izin verilen değerleri karşılaştır.
Kullanılmayan kütüphane satırını silmek neden her zaman fark yaratmaz?
Derleyici ve bağlayıcı, kütüphanenin ihtiyaç duyulmayan bölümlerini son programa eklemeyebilir. Bu nedenle kaldırılan #include satırı, son dosyaya giren kodu değiştirmiyorsa program boyutu da değişmez.
Metni kısaltınca derleme çıktısında hangi değerler karşılaştırılmalıdır?
Önce Sketch uses ile program belleği için verilen Maximum değerini, ardından Global variables use, kalan dinamik bellek ve ilgili maksimum değeri karşılaştır. Böylece değişikliğin program belleğini mi, RAM’i mi, yoksa ikisini birden mi etkilediği anlaşılır.
Arduino bellek hatalarını çözerken en güvenilir yaklaşım, değişiklikleri tek tek uygulayıp her sonucu derleme çıktısı ve çalışan program üzerinden değerlendirmektir.