![]() ![]() INFO - FAQ - CC2-Forum - CCPro-Forum |
|
' ---------------------------------------------------------------------------- ' Demonstration von "Run On Error" auf den Open-Control-Mikrocontrollern ' In OCBASIC 1.11a für Open-Maxi von Dietmar Harlos am 10. Mai 2018 ' ---------------------------------------------------------------------------- ' Normalerweise unterbricht die OM die Programmausführung, sobald ein Fehler ' auftritt. Durch Setzen des Bits RunOnErr kann man die OM jedoch anweisen, ' das BASIC-Programm bei einem Fehler neu zu starten. Die Daten der ' verwendeten Variablen bleiben dabei erhalten. Das Betriebssystem wird ' reinitalisiert. Der Fehlergrund steht in der internen Variable ERR und die ' Adresse des Bytes hinter dem fehlerhaften Tokenbefehl steht in ERRADR. ' Diese Funktion ist dazu vorgesehen, um an den Beginn des Programms eine ' Fehlerbehandlungsroutine zu stellen und die Programmausführung bei Eintritt ' eines Fehlers zu beenden. Das Auftreten eines Fehlers ist ein Hinweis, daß ' irgendetwas im Programm nicht korrekt abläuft. Das Programm sollte deshalb ' nicht einfach nochmals durchlaufen werden. Zumal der RAM-Speicher und somit ' auch das User-RAM mit den Variablen nicht reinitalisiert wurden. ' Sobald ein Fehler auftritt, wird in der internen Variable ERR der ' Fehlergrund als Fehlernummer kodiert abgelegt. Nach Programmstart ohne ' Fehler enthält ERR den Wert 0. ERR belegt auf der OM den gleichen ' RAM-Speicher wie DBNZCTR und RAND. ' Bei Fehlern in der Datendatei (d.h. wenn das I²C-EEPROM nicht ansprechbar ' ist - kein ACK sendet) wird die Programmausführung auf der Open-Maxi nicht ' mehr wie auf den bisherigen OM-Controllern mit Fehler abgebrochen, sondern ' nur das Fehlerbit FileErr gesetzt, das der Anwender abfragen kann. Wenn ' das Fehlerbit gesetzt ist, werden vom Betriebssystem alle nachfolgenden ' Dateibefehle (z.B. PRINT#) ignoriert. Das Fehlerbit wird vom Betriebssystem ' bei OPEN# automatisch resettet. ' ---------------------------------------------------------------------------- INCLUDE "omax.def" 'Definitionen für die Open-Maxi ' ---------------------------------------------------------------------------- ' Nach einem Fehler Programm neu starten, Fehlergrund in ERR und Adresse ' hinter dem fehlerhaften Tokenbefehl in ERRADR RunOnErr=ON IF ERR THEN WHILE TRUE PRINT "RUN ON ERR: "; IF ERR=0 THEN 'nur zur Verdeutlichung PRINT "kein Fehler"; ELSE IF ERR=1 THEN PRINT "Zuviele GOSUB-Verschachtelungen"; ELSE IF ERR=2 THEN PRINT "RETURN ohne GOSUB"; ELSE IF ERR=3 THEN 'nicht auf Open-Maxi PRINT "File-I/O-Error"; ELSE IF ERR=128 THEN PRINT "Illegales Token"; END IF PRINT "! Adresse: $"; PrintHex=ON PRINT ERRADR PAUSE 25 WEND END END IF ' ---------------------------------------------------------------------------- ' Fehler provozieren #endlos 'GOSUB endlos '"Zuviele GOSUB-Verschachtelungen" RETURN '"RETURN ohne GOSUB" 'INLINE 100 '"Illegales Token" ' ---------------------------------------------------------------------------- End2Host=ON 'Nach Programmende in den Host-Modus END 'Programmende, Neustart mit der Enter-Taste ' --------------------------------------------------------------------------- Meine Homepage: http://ccintern.dharlos.de |
Antwort schreiben |