Michael schrieb:
Wenn du Unterprogramme nicht mit Return abschließt, läuft dein Stack über.
Bin auch darüber gestolpert, ist aber in Bascom so, wenn Stackspeicher zu klein dann kann es basieren du überschreibst den Dim Bereich. Die Folgen sind verheerend da es ein nicht nachvollziehbar Fehler wird.
Also wenn du eine Sub vor Return verlässt wird Stackbereich nicht für eine neue Subadresse freigegeben sondern ein neurer Platz wird reserviert.
Somit sollte dieser Bereiche optimal eingestellt werden.
Nun kommt gleich noch ein Tipp warum ich Bascom mag. Ist nicht so starr wie andere Hochsprachen.
Du schreibst ja nicht Return bla, sondern nur Return, somit ist Befehl allgemein gültig.
Könnte also auch so aussehen.
main:
Return
do
bla bla
debounce taster,0,sub
loop
Return
sub:
bla
bla
gosub bla
Return
bla:
do
if bla > bla then
gosub main
end if
loop
Return
Nun sollte der Speicherplatz immer zurückgesetzt sein.(ist ein Return zu viel wird gemeckert)
Aber warum so umständlich wenn ich mit bedacht Goto anwende.
Ja Goto- Befehl ist hier verhöhnt. Warum ist mir immer noch ein Rätsel, obwohl ein uralter und sicherer Befehl.
Mit Befehl kannst du knallhart von jedem Ort in ein Lable springen ohne was zwischen zu speichern oder hoch zu zählen. Aber wie gesagt „mit bedacht“ da Du genau wissen musst wo hin und her gesprungen wird. Compiler nimmt Dich dies nicht mehr ab.
Dies könnte der einzige Grund sein warum GOTO , obwohl selbst in Bascom-AVR es ein wichtiger Bestandteil des Programms ist, belächelt wird.
Bevor ich ein HW- Reset erzwinge bevorzuge ich immer eine SW –Lösung um nicht die Hauptschleife zu verlassen und alle den „Kram“ wieder neu zu laden.
Mal so auf der Schnelle.
main:
Losgehts: ‘Bitte nicht “Start” als Name nutzen. Ist eine Systemvariable. Gleich noch Startbedingungen generieren.
Osterei kaput = 0
Ei = Gelb usw.
Return
‘ nun wird Hauptschleife wieder gestarten.
Do
bla bla
debounce taster,0,sub ‘Taster ist der Hammer
If Osterei kaput Then Goto Losgehts ‘beginnt wieder bei „main“ nicht ganz oben.
Else Gosub Sub
Loop
Sub:
If Ei blau Then Goto Losgehts ‘Neustart
Else Gosub Nachricht
Return
Nachricht:
Print „FrohesOsterfest“
Wait 60
Return ‚Spring nach Sub und bekommt je nach Eierfarbe ein Return und Stack ist wieder „Sauber“
Sehr grob und schelmisch beschrieben.
Mit freundlichen Grüßen
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von fredred ()