mikrocontroller.net

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


Autor: Sepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Magnus M. (magnetus) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tim T. (tim_taylor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Stack/Ram ist irgendwann voll.

Autor: Sepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: AS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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"

Autor: oldmax (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas O. (kosmos)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.