Forum: Mikrocontroller und Digitale Elektronik unterprogramm und rücksprung


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.

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.