Forum: Mikrocontroller und Digitale Elektronik HW Stack


von Thomas K. (dlt)


Lesenswert?

Hallo Forum

benutze einen tiny15 (hat nur 3 level HW stack)
sprich pop push geht nicht

nun meine frage:
stack wird nur für rücksprungadressen verwendet?
wenn man in einem prog nun immer nur sprungbefehle hat und keine
ret-befehle geht der stack ja zwangsweise über

wenn ich die rücksprungadressen aber eh nie verwende kann mir das ja
egal sein?

oder verwirrt das den tiny zu sehr? fehlfunktionen etc.?

vielen dank
thomas

von Läubi (Gast)


Lesenswert?

Wenn du die Rücksprung Adresse nie verwendest... dann aknste auch nen
(R)JMP nehmen anstelle von CALL

von Thomas K. (dlt)


Lesenswert?

verwende eh nur rjmp bzw. jmp

also kann mir der überlaufende stack wurst sein?

danke

thomas

von Markus_8051 (Gast)


Lesenswert?

jmp und rjmp legen keine Rücksprungadressen auf den Stack, also hier
keiner Gefahr eines Stackoverflows.

Markus_8051

von Läubi (Gast)


Lesenswert?

Nur wen du ne (R)CALL verwendest oder in eine ISR springt wird eine
Rücksprung Adresse auf den Stack geschrieben (aus ne ISR solltest du
aber in jedem fall mit RETI raus, weil du sosnt eventuell Probleme
bekommst mit undefiniertem Verhalten)

von crazy horse (Gast)


Lesenswert?

nix undefiniertes Verhalten...
Der einzige Unterschied zwischen ret und reti ist, dass bei reti das
i-flag automatisch wieder gesetzt wird. Das muss durchaus nicht immer
sein, manchmal ist es sogar sinnvoll, aus einer ISR mit ret
herauszugehen.

von Thomas K. (dlt)


Lesenswert?

vielen dank!

hab die unterschiede jetzt kapiert

von Läubi (Gast)


Lesenswert?

Ich meinte wenn weder RET noch RETI benuzt... dann kommt manchmal
komisches raus ;)

von Hannes L. (hannes)


Lesenswert?

Der Stack sollte immer ausgeglichen sein, egal ob Hardwarestack oder
Stack im SRAM über Stackpointer. Jedes Push braucht sein Pop, jedes
(R)Call oder Int-Aufruf braucht sein Ret(i). Das ist eine der
Grundregeln der ASM-Programmierung.

...

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.