Альтернативний вигляд: мікроконтролерам не вистачає пам'яті.
Принаймні, не при правильному програмуванні. Програмування мікроконтролера не зовсім схоже на програмування загального призначення, щоб правильно це зробити, ви повинні знати про його обмеження та відповідно програмувати. Існують інструменти, які допоможуть це забезпечити. Шукайте їх та вивчайте їх - принаймні, як читати сценарії та попередження про посилання.
Однак, як кажуть Маєнко та інші, у погано запрограмованого мікроконтролера може не вистачити пам’яті, а потім зробити все, включаючи нескінченний цикл (який, принаймні, дає можливість таймеру сторожового часу скинути його. Ви ввімкнули таймер сторожового вікна, чи не так? )
Загальні правила програмування мікроконтролерів уникають цього: наприклад, вся пам'ять або виділяється на стеці, або виділяється статично (глобально); "новий" або "малок" заборонено. Так само є рекурсія, щоб максимальну глибину введення підпрограми можна було проаналізувати та показати, що вона вміщується у наявний стек.
Таким чином, максимальний необхідний обсяг пам’яті може бути обчислений під час компіляції або зв’язку програми та порівняння з розміром пам’яті (часто кодується у скрипті лінкера) для конкретного процесора, на який ви орієнтовані.
Тоді у мікроконтролера може не вистачити пам’яті, але програма може. І в такому випадку ти дістаєшся
- перепишіть його, менший розмір, або
- виберіть більший процесор (вони часто доступні з різними розмірами пам'яті).
Одним загальним набором правил програмування мікроконтролерів є MISRA-C , прийняті автомобільною промисловістю.
На мій погляд, найкраща практика - використовувати підмножину SPARK-2014 для Ада. Ада насправді орієнтована на невеликі контролери, такі як AVR, MSP430 та ARM Cortex, досить добре і, таким чином, забезпечує кращу модель для програмування мікроконтролерів, ніж C. Але SPARK додає до програми примітки у вигляді коментарів, де описано, що робить програма.
Тепер інструменти SPARK аналізуватимуть програму, включаючи ці примітки, та доводять властивості щодо неї (або повідомляють про можливі помилки). Вам не доведеться витрачати час або кодовий простір, займаючись помилковими доступами до пам'яті або цілими переповненнями, оскільки вони, як було доведено, ніколи не трапляються.
Незважаючи на те, що з SPARK працює більше передньої роботи, досвід показує, що вона може швидше та дешевше дістатися до продукту, оскільки ви не витрачаєте час на переслідування таємничих перезавантажень та іншої дивної поведінки.
Порівняння MISRA-C та SPARK