mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik unterprogramm und rücksprung


Autor: HDW (Gast)
Datum:

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

Autor: crazy horse (Gast)
Datum:

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

Autor: MooseChecker (Gast)
Datum:

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

Autor: MooseChecker (Gast)
Datum:

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

Autor: MooseChecker (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: MooseChecker (Gast)
Datum:

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

Autor: HDW (Gast)
Datum:

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