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
Gast
#305309
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
Gast
#305311
jmp und rjmp legen keine Rücksprungadressen auf den Stack, also hier keiner Gefahr eines Stackoverflows. Markus_8051
Gast
#305312
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)
Gast
#305313
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.
vielen dank! hab die unterschiede jetzt kapiert
Gast
#305315
Ich meinte wenn weder RET noch RETI benuzt... dann kommt manchmal komisches raus ;)
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. ...
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.