Also ich hätte nichts dagegen obwohl ich versuchen würde es anders zu lösen ;) Der Sprung mit GOTO sollte nur nicht aus einem Unterprogramm oder gar einer Interruptroutine heraus erfolgen, da sonst der Stack durcheinanderkommt.
Gruß
Searcher
Druckbare Version
Also ich hätte nichts dagegen obwohl ich versuchen würde es anders zu lösen ;) Der Sprung mit GOTO sollte nur nicht aus einem Unterprogramm oder gar einer Interruptroutine heraus erfolgen, da sonst der Stack durcheinanderkommt.
Gruß
Searcher
Sowohl in meinem recht komplexen Transistortester - ähnlich hier, aber mit I 2 C und weiteren, eigenen Funktionen - als auch in meinem Pacer (hier) habe ich GOTO´s. Der Pacer läuft mit sleep - und ich habe eigentlich noch nie nen Absturz erlebt. Der Transitortester wird zwar immer neu gestartet, aber auch hier ist bei längerem, durchgehenden Gebrauch kein Nachteil zu erkennen - und keine Fehlfunktion.Zitat:
... nichts dagegen obwohl ich versuchen würde es anders zu lösen . Der Sprung mit GOTO ...
@oberallgeier: Ich habe ja auch gar nichts gegen die Nutzung von Goto. Mir ging es darum, daß man auf den Stackpointer achten sollte und bei Sprung aus einer ISR heraus auch noch auf das Global Interrupt Enable Bit. Das könnte kompliziert werden und kann man vermeiden, wenn man Goto vermeidet oder es nur innerhalb des Hauptprogramms verwendet bzw. nur innerhalb von Subroutinen springt.
zB bei sowas wird der Stackpointer immer weiter nach unten gesetzt und es muß irgendwann zum crash kommen.
Steht anstelle von "goto init" ein "goto 0" wird auch der Stackpointer neu initialisiert.Code:dim x as byte
dim y as byte
init:
x = 1
y = 2
gosub check
do
loop
check:
if x = 1 goto init
return
end
Ist halt eine Frage der Konstellation und wie Demmy es einsetzt.
Gruß
Searcher
Also ich habe es in etwa so gelöst:
Also bis jetzt funktioniert es einwandfrei.Code:'Hardwarekonfiguration
....
'Variablendeklaration
....
'Anlaufbedingungen / Startberechnungen
....
Resetpunkt:
' Variablen richten
....
' Notwendige Berechnungen
...
' Hauptschleife
Do
if .... then
goto Resetpunkt
end if
Loop
Da finde ich jetzt kein Haar in der Suppe :-) ; ist in Ordnung!Zitat:
Zitat von demmy
Gruß
Searcher
Ja, geht auch.
Ist in etwa das gleiche wie meine Vorgehensweise.
Code:
'Hardwarekonfiguration
....
'Variablendeklaration
....
'Anlaufbedingungen / Startberechnungen
....
gosub Resetpunkt
' Hauptschleife
Do
if .... then
gosub Resetpunkt
end if
Loop
end
Resetpunkt:
' Variablen richten
....
' Notwendige Berechnungen
...
return