Alternatif bir görüş: Mikrodenetleyicilerin belleği kalmaz.
En azından doğru programlandığında değil. Mikrodenetleyiciyi programlamak genel amaçlı programlamaya tam olarak benzemez, düzgün bir şekilde yapabilmek için kısıtlamalarının farkında olmanız ve buna göre programlamanız gerekir. Bunu sağlamaya yardımcı olacak araçlar var. Bunları araştırın ve öğrenin - en azından bağlayıcı komut dosyalarını ve uyarılarını nasıl okuyacağınızı.
Ancak Majenko ve diğerlerinin söylediği gibi, kötü programlanmış bir mikro denetleyicinin belleği tükenebilir ve daha sonra sonsuz döngü de dahil olmak üzere herhangi bir şey yapabilir (en azından bekçi zamanlayıcısına bunu sıfırlama şansı verir. )
Mikrodenetleyiciler için ortak programlama kuralları bundan kaçınır: örneğin, tüm bellek ya yığına ayrılır ya da statik olarak (global olarak) ayrılır; "yeni" veya "malloc" yasaktır. Özyineleme de öyle, böylece altyordam iç içe geçirmenin maksimum derinliği analiz edilebilir ve mevcut yığına sığacak şekilde gösterilebilir.
Bu nedenle, program derlendiğinde veya bağlandığında gereken maksimum depolama alanı hesaplanabilir ve hedeflediğiniz belirli işlemci için bellek boyutu (genellikle bağlayıcı komut dosyasında kodlanır) ile karşılaştırılabilir.
Daha sonra mikro denetleyicinin belleği bitmeyebilir, ancak programınız olabilir. Ve bu durumda,
- yeniden yaz, daha küçük veya
- daha büyük bir işlemci seçin (genellikle farklı bellek boyutlarında mevcuttur).
Mikrodenetleyici programlama için yaygın bir kural kümesi , motor endüstrisi tarafından kabul edilen MISRA-C'dir .
Bana göre en iyi uygulama Ada'nın SPARK-2014 alt kümesini kullanmaktır . Ada aslında AVR, MSP430 ve ARM Cortex gibi küçük kontrolörleri makul bir şekilde iyi hedefliyor ve doğal olarak mikrodenetleyici programlama için C'den daha iyi bir model sağlıyor.
Şimdi SPARK araçları, bu ek açıklamalar dahil olmak üzere programı analiz edecek ve onunla ilgili özellikleri kanıtlayacak (veya potansiyel hataları bildirecektir). Hatalı bellek erişimi veya tamsayı taşması ile ilgili zaman veya kod alanı harcamak zorunda değilsiniz çünkü bunların asla gerçekleşmediği kanıtlanmıştır.
SPARK ile ilgili daha fazla ön çalışma olmasına rağmen, deneyim, bir ürüne daha hızlı ve daha ucuza ulaşabileceğini gösteriyor çünkü gizemli yeniden başlatmaları ve diğer garip davranışları kovalamak için zaman harcamıyorsunuz.
MISRA-C ve SPARK karşılaştırması