Forum: Mikrocontroller und Digitale Elektronik Was passiert wenn sich Unterprogramme immer wieder gegenseitig aufrufen?


von Sepp (Gast)


Lesenswert?

nAbend,

was passiert eigentlich wenn zB UP1 das UP2 aufruft, UP2 ruft UP3 auf 
und UP3 zB wieder UP1 und wieder von vorne, ohne das jemals in das 
aufrufende UP zurückgekehrt wird?

Gibt das irgendwann Probleme?

schöne Nacht noch

Gruß Sepp

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Sepp schrieb:
> nAbend,

Moin.

> was passiert eigentlich wenn zB UP1 das UP2 aufruft, UP2 ruft UP3 auf
> und UP3 zB wieder UP1 und wieder von vorne, ohne das jemals in das
> aufrufende UP zurückgekehrt wird?

Stacküberlauf.

> Gibt das irgendwann Probleme?

Sicher. So schnell kannst du gar nicht "Problem" sagen.

Gruß,
Magnetus

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

Dein Stack/Ram ist irgendwann voll.

von Sepp (Gast)


Lesenswert?

ah, ich war schon kurz davor sowas zu programmieren, aber im 
Hinterstübchen hat dann doch ne kleine Alarmglocke geleutet...

wär bestimmt lustig zu debuggen geworden...

so, gut Nacht :-)

von AS (Gast)


Lesenswert?

Sepp schrieb:
> was passiert eigentlich wenn zB UP1 das UP2 aufruft, UP2 ruft UP3 auf
> und UP3 zB wieder UP1 und wieder von vorne, ohne das jemals in das
> aufrufende UP zurückgekehrt wird?

Kommt drauf an womit Du programmierst ;-)
Stichwort(e): "proper tail calls"

von oldmax (Gast)


Lesenswert?

Hi
> was passiert eigentlich wenn zB UP1 das UP2 aufruft, UP2 ruft UP3 auf
> und UP3 zB wieder UP1 und wieder von vorne, ohne das jemals in das
> aufrufende UP zurückgekehrt wird?

Da frag ich mich doch ernsthaft, wofür dies gut sein soll. Klar, es gibt 
rekursive Aufrufe, die  bis zu einer vorgegebenen Tiefe arbeiten dürfen, 
aber auch da ist ein RET zwingend.
Normalerweise ist doch eine Programmschleife mit Aufrufen von 
Unterprogrammen genau das, was du willst. Hier wird allerdings jedes 
Unterprogramm wieder mit RET in die Hauptschleife zurückgeführt.
Willst oder mußt du so wie angedacht programmieren, dann schreib in 
jedes Unterprogramm zwei POP auf ein unbenutztes Register...
Gruß oldmax

von Thomas (kosmos)


Lesenswert?

Stacküberlauf, aber wenn man es weiß kann man ja gleich ohne Ablegen 
einer Rücksprungadresse auf den Stack, verzweigen

In AVR-ASM z.B. jmp  statt rcall benutzen.

von Sepp (Gast)


Lesenswert?

oldmax schrieb:
> Da frag ich mich doch ernsthaft, wofür dies gut sein soll.

zu gar nix, war mehr ein Versehen, ist mir zum Glück aber noch 
aufgefallen

von Oliver (Gast)


Lesenswert?

Sepp schrieb:
> ist mir zum Glück aber noch
> aufgefallen

Keine Angst, das wäre dir auch ohne Glück ganz schnell aufgefallen.

Oliver

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.