Forum: Mikrocontroller und Digitale Elektronik unterprogramm und rücksprung


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von HDW (Gast)


Lesenswert?

hallo

mal eine generelle frage zu pics: kann man aus einem unterprogramm 
mittels "goto" rausgehen? im extremfall würde vielleicht das 
unterprogramm gar nicht mit "return" beendet werden.
geht das ?

bspw. so:


call  unterp
nop
nop
...

unterp
      goto Ende
      return


ende
   nop
   nop

   end

von crazy horse (Gast)


Lesenswert?

das geht solange gut, bis der Stack überläuft. Solchen Mist sollte man 
sich erst gar nicht angewöhnen. Call wird mit return beendet - basta.
Es gibt nur wenige sinnvolle Ausnahmen von dieser Regel, allerdings muß 
man dann den SP manuell manipulieren, geht gar nicht bei allen 
Prozessoren.

von MooseChecker (Gast)


Lesenswert?

Da man beim PIC nicht an den Stackpointer rankommt und auch kein 
PUSH/POP existiert, kannst Du die Rückkehradresse nicht ausräumen.

MooseC

von MooseChecker (Gast)


Lesenswert?

Das einzige was mir dazu einfällt ist den Stackpionter gewollt 
überlaufenzulassen - mit 7 weiteren CALLs um auf den Stackeintrag vor 
dem betreffenden CALL kommen.

Ob das geht weiß ich nicht, solche Schweinereien mag ich nicht so gern.



..
..
..
  call fillstack_1
fillstack_1:
  call fillstack_2
fillstack_2:
  call fillstack_3
fillstack_3:
  call fillstack_4
fillstack_4:
  call fillstack_5
fillstack_5:
  call fillstack_6
fillstack_6:
  call fillstack_7
fillstack_7:
  goto  xyz


Für Peter D. ein gefundenes Fressen ;)

MooseC

von MooseChecker (Gast)


Lesenswert?

Nee, laß man lieber. Das würde nur im Level 1 des Stackpointers gehen, 
weil Du ja sonst die anderen noch gültigen Rückkehradressen vernichtest.

MooseC

von Peter D. (peda)


Lesenswert?

@Moose,

"Für Peter D. ein gefundenes Fressen ;)"

nein, denn daß ist ja kein Nachteil einer Architektur, wenn sie 
unsauberes Programmieren nicht unterstützt.


Verrücktes Pferd hat da völlig recht: CALL->RETURN und nichts anderes.


Wenn man sich erstmal einen vernünftigen Ablaufplan gemacht hat, statt 
sofort Spaghettikode einzuhacken, wird man auch sehen, daß dafür auch 
immer die Möglichkeit besteht.


Peter

von MooseChecker (Gast)


Lesenswert?

Ja das stimmt, saubere abgeschlossene Module sind oberstes Gebot.
Das war auch nicht gemeint, sondern das Fehlen von PUSH/POP oder 
sonstigen Stackoperationen, die einem die Möglichkeit von lokalen 
Variablen oder Parameterübergaben ermöglichen.

Da hätte ich eigentlich eine Reaktion von Dir erwartet, nach der 
Auseinandersetzung mit dem "zufriedenen PIC-User" gestern.

Hoffentlich fühlt der sich jetzt nicht wieder auf den Schlips getreten.


Diese PIC-Sachen arten ja immer in einer art Glaubenskrieg aus...

MooseC

von HDW (Gast)


Lesenswert?

habe ich mir leider schon gedacht, dass das nicht möglich ist. wird wohl 
anders gehen müssen.

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]
  • [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.