Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Reset-Historie per "System Reset Status Register" Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 1.09.2018 14:13)
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini M-Unit, Open-Mini Station
' ============================================================================
' Reset-Historie per "System Reset Status Register" (SRS) auf der Open-Maxi
' In OCBASIC 1.12a_e1 von Dietmar Harlos am 01. September 2018
' ============================================================================

' Auf FREERAM1 wird vom Open-Maxi-Betriebssystem beim Programmstart der Wert
' aus dem "System Reset Status Register" (SRS) hinterlegt. Dieses Register
' enthält sechs Statusflags, um die Quelle des letzten Resets anzuzeigen.

' Dieses Programm muß mit gesetztem Autostart-Jumper ausgeführt werden.

' Für die Werte von SRS siehe folgende Tabelle:

' SRS: ... Ursache des Resets:

' $82 .... Power-On Reset - Reset was caused by the power-on detection logic.
'          And Low Voltage Detect - If the supply drops below the LVD trip
'          voltage, an LVD reset will occur. This bit is also set by POR.
' $40 .... External Reset Pin - Reset was caused by an active-low level on
'          the external reset pin.
' $10 .... Illegal Opcode - Reset was caused by an attempt to execute an
'          unimplemented or illegal opcode.
' $02 .... Low Voltage Detect - If the supply drops below the LVD trip
'          voltage, an LVD reset will occur. This bit is also set by POR.

' Wenn FREERAM1 gleich 13 ($0d) ist, wurde der Open-Maxi-Interpreter durch
' den Hostmode gestartet. Und bei 255 ($ff) wurde das Programm nach einem
' END neu gestartet, weil der Autostart-Jumper gesetzt ist.

' Die Ausführung dieses Programms kann vom Anwender im Terminalprogramm
' mittels der Befehle l, o, e oder h unterbrochen werden. Siehe unten.

' --- Definitionen für das System --------------------------------------------

INCLUDE "omax.def"         'Definitionen für die Open-Maxi

' --- Definitionen des Anwenders ---------------------------------------------

DIM a,b,c BYTE

' --- Hauptprogramm ----------------------------------------------------------

OPEN# FOR APPEND           'Reset-Quelle mitloggen
  PRINT# FREERAM1
CLOSE#

WHILE TRUE

  ?"---"
  ?"Bisherige Reset-Historie:"
  a=1
  OPEN# FOR READ
  WHILE NOT EOF
    ?a;":";
    PrintHex=ON
    ?" $"INPUT#
    PrintHex=OFF
    ADD a,1
  WEND
'  CLOSE#                   'Kann entfallen beim Lesen

  IF RXD THEN
    b=GET
    IF b=ASC("l") THEN         'l: Historie löschen
      OPEN# FOR WRITE : CLOSE#
    ELSE IF b=ASC("o") THEN    'o: Illegalen Opcode ausführen
      illopcode
    ELSE IF b=ASC("e") THEN    'e: END ausführen
      END
    ELSE IF b=ASC("h") THEN    'h: Hostmode starten
      End2Host=ON
      END
    END IF
  END IF

  PAUSE 25
WEND

END

' --- Subroutinen ------------------------------------------------------------

PROCEDURE illopcode INLASM
  ! db $8d                 'Illegaler Opcode
  ! rts
END PROCEDURE

' --- Ende des Programms ----------------------------------------------------


Meine Homepage: http://ccintern.dharlos.de

 Antwort schreiben

Bisherige Antworten: