Почему-то перестала работать программа
По мере роста программы в неё добавляются всё новые и новые функции, и всё это прекрасненько эдак работает, но вдруг в какой-то момент почему-то работать перестаёт. Всё по-прежнему успешно компилируется, но программа почему-то не работает. Поиски причины могут занять целые сутки, но причина такого поведения всегда одна: каждый дополнительный вызов функции -- это дополнительное сохранение регистров на стеке, а ОЗУ в микроконтроллере маленькое в отличие от микрокомпьютера на базе микропроцессора. И когда место под стек заканчивается, то программа начинает вести именно таким образом -- что-то по-прежнему работает, а что-то работать перестаёт.
Возникает вопрос, как же решить проблему. Проблему не решить другим способом, кроме как проектировать устройство, рассматривая каждый микроконтроллер как переходник-конвертер между двумя различными интерфейсами или между двумя форматами данных. Иначе говоря "один микроконтроллер = одна функция". Печально, но зато микроконтроллеры можно связывать между собой по параллельной шине данных, создавая таким образом микрокомпьютер с сетевой архитектурой.
- Базовый заголовок (#include)
- Arduino как терминал
- Как увидеть PWM
- Почему-то программа перестала работать
- Дребезг контактов
- Какой потенциометр выбрать
- Спящий режим Arduino
- Как уменьшить размер скетча
- Как использовать сторожевой таймер микроконтроллера ATmega328p
- Экономия энергопотребления Arduino
- Таинственный таймер-счётчик 2 Arduino Leonardo
- Arduino и микроконтроллер ATmega8
- Как перезагрузить Arduino (программный рестарт)
- Как перезагрузить Arduino (холодный рестарт)