Optimizasyon
Gömülü sistemler için düşük seviyeli programlama, bilgisayarlar ve cep telefonları gibi genel amaçlı cihazların programlanmasından oldukça farklıdır. Kaynaklar birinci sınıf olduğu için verimlilik (hız ve alan açısından) çok daha önemlidir. Bu, alanınız tükenirse yapılacak ilk şey, kodunuzun hangi bölümlerini optimize edebileceğinize bakmaktır.
Program alanı (Flash) kullanımının azaltılması açısından, kod boyutu deneyimsizseniz veya bu beceriye ihtiyaç duymayan masaüstü bilgisayarlar için programlamaya daha alışkınsanız, optimize etmek oldukça zor olabilir. Eğer kroki gerçekten ciddiye düşünün eğer o yardım etmek rağmen maalesef, her durum için çalışacak hayır 'Sihirli mermiler' yaklaşımı var ihtiyacı var. Bir özellik gerekli değilse, çıkarın.
Bazen, kodunuzun birden çok bölümünün aynı (veya çok benzer) nerede olduğunu belirlemek de yararlı olabilir. Bunları birden fazla yerden çağrılabilen yeniden kullanılabilir işlevler olarak yoğunlaştırabilirsiniz. Ancak, bazen kod yapmaya çalışıyorum unutmayın çok aslında tekrar kullanılabilen daha ayrıntılı yapma biter. Alıştırma yapma eğiliminde olan grev yapmak zor bir denge. Kod değişikliklerinin derleyici çıktısını nasıl etkilediğine bakarak biraz zaman harcamak size yardımcı olabilir.
Çalışma zamanı verileri (SRAM) optimizasyonu, alışkın olduğunuzda biraz daha kolay olma eğilimindedir. Başlangıç programcıları için çok yaygın bir sorun, çok fazla küresel veri kullanıyor. Global kapsamda ilan edilen herhangi bir şey, skeçin ömrü boyunca geçerli olacak ve bu her zaman gerekli değildir. Bir değişken yalnızca bir işlev içinde kullanılıyorsa ve çağrılar arasında kalıcı olması gerekmiyorsa, onu yerel bir değişken yapın. Bir değerin işlevler arasında paylaşılması gerekiyorsa, değeri global yapmak yerine parametre olarak geçirip geçiremeyeceğinizi düşünün. Bu şekilde, SRAM'ı yalnızca gerçekten ihtiyacınız olduğunda bu değişkenler için kullanırsınız.
SRAM kullanımı için bir başka katil metin işlemedir (örneğin, String
sınıfı kullanmak ). Genel olarak konuşursak, mümkünse String işlemlerini yapmaktan kaçınmalısınız. Onlar büyük hafıza domuzları. Örneğin, seriye çok sayıda metin çıktısı alıyorsanız, Serial.print()
dize bitiştirme kullanmak yerine birden çok çağrı kullanın . Ayrıca mümkünse kodunuzdaki string değişmezlerinin sayısını azaltmaya çalışın.
Mümkünse, özyinelemeden kaçının. Özyinelemeli bir çağrı yapıldığında, yığını daha derine iner. Özyinelemeli işlevlerinizi yerine yinelemek için refactor.
EEPROM kullanın EEPROM
, yalnızca zaman zaman değişen şeylerin uzun süreli depolanması için kullanılır. Büyük listeler veya sabit veri arama tabloları kullanmanız gerekiyorsa, önceden EEPROM'da saklamayı ve yalnızca ihtiyaç duyduğunuzda gerekenleri çıkarmayı düşünün.
Açıkçası EEPROM, boyut ve hız bakımından oldukça sınırlı ve sınırlı sayıda yazma döngüsüne sahip. Veri sınırlamalarına harika bir çözüm değildir, ancak Flash veya SRAM üzerindeki yükü hafifletmek için yeterli olabilir. Aynı zamanda, SD kart gibi benzer harici depolama birimleriyle arayüz oluşturmak da oldukça mümkün.
Genişleme
Diğer tüm seçenekleri tükettiyseniz, genişletme olasılığı da olabilir. Ne yazık ki, program alanını artırmak için Flash belleği genişletmek mümkün değildir. Ancak, bir SRAM genişletmek mümkündür. Bu, artan veri boyutu pahasına kod boyutunu azaltmak için eskizinizi yeniden değerlendirebileceğiniz anlamına gelir.
Daha fazla SRAM almak aslında oldukça basittir. Bir seçenek bir veya daha fazla 23K256 cips kullanmaktır. SPI üzerinden erişilir ve bunları kullanmanıza yardımcı olacak SpiRAM kütüphanesi bulunur . Sadece 3.3V'da 5V'da çalışmadıklarına dikkat edin !
Mega kullanıyorsanız, alternatif olarak Lagrangian Noktası veya Sağlam Devrelerden SRAM genleşme kalkanlarını alabilirsiniz .