Forum: Mikrocontroller und Digitale Elektronik Stack von avr


von Martin (Gast)


Lesenswert?

Hi!

ich programmier meine avr´s mit assembler und mit dem avr studio.
wenn ich doch immer wieder etwas auf den stack schiebe und es nicht
mehr hol ist er doch irgendwann voll?? overflow?? oder wie nennt sich
das. Wie kann ich das vermeiden?
Ich mein, wie kann ich den ganzen inhalt vom stack löschen?
welchen befehl muss ich da verwenden?


bin für alle tipps dankbar
Martin

von crazy horse (Gast)


Lesenswert?

das ist wie mit den Frauen - auf Dauer funktioniert das nur, wenn man
sie ordentlich behandelt...
Der Stack wird im Normalfall nur ein einziges Mal gesetzt, und zwar am
Programmanfang. Ab da gehört zu jedem stackschreiben ein stacklesen.
Wozu sollte man was auf den stack schreiben und dann nicht wieder
abholen??  Wenn du es nicht mehr brauchst, lass das Schreiben.

von Henning (Gast)


Lesenswert?

im stack werden auch (insbersondere!) rücksprung adressen für den
programmablauf gesichert. daten solltest du da nur kurz pushen und
popen (als "kurzzeitgedächnis") und längerfristig gesehen daten im
ram (definierte adresse) ablegen

denn du

call xxyy
xxyy:
push zz
ret

machst wird´s nen fehler geben, weil das programm an der stellen yyzz
und nich xxyy fortgesetzt wird. guck dir das tutoriall hier nochmal an.

von Peter D. (peda)


Lesenswert?

"das ist wie mit den Frauen"

Na na, da sind ja doch gravierende Unterschiede.

Der Stack funktioniert vollkommen logisch, man kann ihn leicht
verstehen und muß nicht erst fragen, obs ihm gerade paßt, daß man ihn
benutzen will :-)


Peter

von Henning (Gast)


Lesenswert?

...nur in ganz, ganz, ganz seltenen fällen ist im Stack ein fehler
festzustellen. Und meistens hat man den dann auch noch selbst
fabriziert.

von crazy horse (Gast)


Lesenswert?

@Peter: hast recht, der stack ist einfacher :-)

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.