Das mit dem Stack ist in der Tat eine Möglichkeit. Allerdings sind ja noch ~400 Byte im RAM frei. Gehen wir mal davon aus, das bei jedem Funktionsaufruf alle 32 Register auf den Stack geschaufelt werden (was nicht der Fall sein dürfte, aber egal). Zusätzlich noch durchschnittlich 4 Byte Funkionsparameter. Macht 36 Byte pro Verschachtelungsebene. 400/36 ~ 11. Ob eine Software tatsächlich so oft eine Unterfunktion aufrufen kann, sollte man schon abschätzen können als Programmierer. Für einen Controller wäre das durch einiges.

Verwendest du malloc oder ähnliches?

Wenn ich mit solchen Problemen konfrontiert bin, sind sämtliche verwendeten Pointer das erste was ich prüfe. Dabei gibt es ein paar Möglichkeiten:

- Array Zugriffe über die Array Grenzen hinaus?
- Pointer versehentlich zu weit erhöht?
- Bei String bearbeitenden Funktionen den Buffer evtl. doch nicht ausreichend dimensioniert?

Auch beliebt: Über/Unterläufe irgendwelcher Variablen, die dann zu den genannten Fehlern führen können.

Was ich auch schon hatte: Versehentlich einen externen Interrupt aktiviert, obwohl der zugehörige Pin nicht beschalten war. Das ging - zumindest fast immer. So lange bis die Spannung durch irgendwelchen eingefangenen Müll mal wieder einen Interrupt ausgelöst hat und der Controller ins Nirvana gesprungen ist. Da stand ich kurz vor einem Nervenzusammenbruch