Почему-то перестала работать программа

По мере роста программы в неё добавляются всё новые и новые функции, и всё это прекрасненько эдак работает, но вдруг в какой-то момент почему-то работать перестаёт. Всё по-прежнему успешно компилируется, но программа почему-то не работает. Поиски причины могут занять целые сутки, но причина такого поведения всегда одна: каждый дополнительный вызов функции -- это дополнительное сохранение регистров на стеке, а ОЗУ в микроконтроллере маленькое в отличие от микрокомпьютера на базе микропроцессора. И когда место под стек заканчивается, то программа начинает вести именно таким образом -- что-то по-прежнему работает, а что-то работать перестаёт.

Возникает вопрос, как же решить проблему. Проблему не решить другим способом, кроме как проектировать устройство, рассматривая каждый микроконтроллер как переходник-конвертер между двумя различными интерфейсами или между двумя форматами данных. Иначе говоря "один микроконтроллер = одна функция". Печально, но зато микроконтроллеры можно связывать между собой по параллельной шине данных, создавая таким образом микрокомпьютер с сетевой архитектурой.