in C gibts sog. stack-end-marker für die jeweiligen stackbereiche, da
wird einfach ein string "stack_end" z.B. an das Ende des stacks
geschrieben. Verschwindet auch das "s" im Laufe der Simulation, hast
du ein stackproblem. Das kann man natürlich auch in Assembler machen,
man muss sich allerdings selbst um die letzte stackadresse (letzte
Variable+1) kümmern.
Bei dem von dir geschilderten Verhalten scheint mir genau das der Fall
zu sein.
Lösungsmöglichkeiten:
-kleinere Variablentypen nehmen, wenn möglich (bit statt char, int
statt long, ich habe sogar schon mal 24bit-Variablen benutzt)
-lokale Variablen verwenden, die nach Beendigung des UP in anderen
verwendet werden können, typischer Fall z.B. Schleifenzähler, da kann
in jedem UP diesselbe Variable bzw. Register verwendet werden
-Verschachtelungstiefe des Programms verringern
Bei den "normalen" Variablen kann es da eigentlich kein Problem
geben, da die einen festen Speicherplatz haben. Es sei denn, sie werden
indirekt adressiert und der pointer läuft aus dem Ruder.
Aber das wäre doch mal eine sinnvolle Erweiterung für AVR-Studio, wenn
man irgendwie die tiefste SP-Adresse sehen könnte.