Forum: Mikrocontroller und Digitale Elektronik Speicherende


von Andreas Franke (Gast)


Lesenswert?

Hallo,
gibt es eine möglichkeit festzustellen, ob ein Programm in einem
AT90s8515 zur Laufzeit den kompletten Arbeitsspeicher (intern) belegt?
Also inklusive Stack.
Mein Programm zeigt nämlich komische Ausfallerscheinungen, wenn ich es
um genau eine Variable erweitere...
Ausfallerscheinungen in der hinsicht, dass z.b. andere Variablen
willkürlich überschrieben werden.

Wiess da jemand Rat ?

Gruß,
Andreas

von crazy horse (Gast)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.