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
Wenn du die Rücksprung Adresse nie verwendest... dann aknste auch nen (R)JMP nehmen anstelle von CALL
verwende eh nur rjmp bzw. jmp also kann mir der überlaufende stack wurst sein? danke thomas
jmp und rjmp legen keine Rücksprungadressen auf den Stack, also hier keiner Gefahr eines Stackoverflows. Markus_8051
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)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.