Pandangan alternatif: Mikrokontroler tidak kehabisan memori.
Paling tidak, tidak ketika diprogram dengan benar. Memprogram mikrokontroler tidak persis seperti pemrograman tujuan umum, untuk melakukannya dengan benar, Anda harus mengetahui kendala dan programnya. Ada alat untuk membantu memastikan ini. Cari dan pelajari - setidaknya cara membaca skrip tautan dan peringatan.
Namun seperti yang dikatakan Majenko dan yang lainnya, mikrokontroler yang diprogram dengan buruk dapat kehabisan memori, dan kemudian melakukan apa saja termasuk infinite loop (yang setidaknya memberi pengawas waktu kesempatan untuk mengatur ulang. Anda mengaktifkan pengawas waktu, bukan? )
Aturan pemrograman umum untuk mikrokontroler menghindari ini: misalnya, semua memori dialokasikan pada stack atau dialokasikan secara statis (global); "Baru" atau "malloc" dilarang. Demikian juga rekursi, sehingga kedalaman maksimum dari subrutin bersarang dapat dianalisis dan ditampilkan agar sesuai dengan tumpukan yang tersedia.
Dengan demikian, penyimpanan maksimum yang diperlukan dapat dihitung ketika program dikompilasi atau ditautkan, dan dibandingkan dengan ukuran memori (sering dikodekan dalam skrip tautan) untuk prosesor spesifik yang Anda targetkan.
Maka mikrokontroler mungkin tidak kehabisan memori, tetapi program Anda mungkin. Dan dalam hal ini, Anda harus melakukannya
- tulis ulang, lebih kecil, atau
- pilih prosesor yang lebih besar (seringkali tersedia dengan ukuran memori yang berbeda).
Satu set aturan umum untuk pemrograman mikrokontroler adalah MISRA-C , yang diadopsi oleh industri motor.
Praktik terbaik dalam pandangan saya adalah dengan menggunakan subset SPARK-2014 dari Ada. Ada sebenarnya menargetkan pengontrol kecil seperti AVR, MSP430 dan ARM Cortex dengan cukup baik, dan secara inheren menyediakan model yang lebih baik untuk pemrograman mikrokontroler daripada C. Tetapi SPARK menambahkan anotasi ke program, dalam bentuk komentar, yang menggambarkan apa yang sedang dilakukan program.
Sekarang alat SPARK akan menganalisis program, termasuk anotasi tersebut, dan membuktikan properti tentang hal itu (atau melaporkan potensi kesalahan). Anda tidak perlu membuang waktu atau ruang kode yang berhubungan dengan akses memori yang salah atau kelebihan integer karena mereka terbukti tidak pernah terjadi.
Meskipun ada lebih banyak pekerjaan di muka yang terlibat dengan SPARK, pengalaman menunjukkan itu bisa menjadi produk lebih cepat dan lebih murah karena Anda tidak menghabiskan waktu mengejar reboot misterius dan perilaku aneh lainnya.
Perbandingan MISRA-C dan SPARK