Also ich hätte nichts dagegen obwohl ich versuchen würde es anders zu lösenDer Sprung mit GOTO sollte nur nicht aus einem Unterprogramm oder gar einer Interruptroutine heraus erfolgen, da sonst der Stack durcheinanderkommt.
Gruß
Searcher
Also ich hätte nichts dagegen obwohl ich versuchen würde es anders zu lösenDer Sprung mit GOTO sollte nur nicht aus einem Unterprogramm oder gar einer Interruptroutine heraus erfolgen, da sonst der Stack durcheinanderkommt.
Gruß
Searcher
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Wegzu einigen meiner Konstruktionen
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.... nichts dagegen obwohl ich versuchen würde es anders zu lösen . Der Sprung mit GOTO ...
Ciao sagt der JoeamBerg
@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
Geändert von Searcher (30.11.2012 um 11:35 Uhr)
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Wegzu einigen meiner Konstruktionen
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 SuppeZitat von demmy
; ist in Ordnung!
Gruß
Searcher
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Wegzu einigen meiner Konstruktionen
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
Wenn das Herz involviert ist, steht die Logik außen vor! \/
Lesezeichen