Der Nachfolger des WDR-Computerclub mit Wolfgang Back und Wolfgang Rudolph - ...und immer ein Bit übrigbehalten!


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 

 Software-Watchdog für die kleinen OM-Controller Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 28.11.2013 22:36)
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Mini M-Unit, Open-Mini Station, sonstige
Hallo zusammen!

Ich habe ein wenig getüftelt und einen Software-Watchdog für die kleinen OM-Controller entworfen.

Laut Wikipedia: Watchdogs werden in Mikrocontroller-gesteuerten elektrischen Geräten eingesetzt, um einem Komplettausfall des Gerätes durch Softwareversagen zuvorzukommen. Verhindert wird der Ausfall eines automatischen Mikrocomputersystems, indem die Software in regelmäßigen Abständen dem Watchdog mitteilt, daß sie noch ordnungsgemäß arbeitet.

Alternativ kann das gleiche auch durch einen Zähler realisiert werden, der in regelmäßigen Abständen von der Software auf einen bestimmten Wert gesetzt wird. Dieser Zähler wird hardwareseitig ständig dekrementiert; erreicht er 0, so hat es die Software nicht geschafft, ihn rechtzeitig zu erhöhen und ist wahrscheinlich "hängengeblieben" oder ausgefallen. Der Watchdog setzt daraufhin das Gerät durch Rücksetzen (Reset) in den definierten Ausgangszustand zurück, damit das von der Software gesteuerte System wieder überwacht ordnungsgemäß arbeiten kann.

Der Code besteht aus zwei Dateien.

' --------------------------------------------------------------------------
' Software-Watchdog für die kleinen OM-Controller von Dietmar Harlos
' entwickelt mit OCBASIC 1.09a auf der Open-Macro am 28. November 2013
' --------------------------------------------------------------------------

' ---------------------------------------------------------------------------

'INCLUDE "om.def"              'Definitionen fuer Open-Micro und Open-Mini
'INCLUDE "omid.def"            'Definitionen fuer Open-Midi
INCLUDE "omac.def"            'Definitionen fuer Open-Macro

DIM watchdogctr BYTE          'Zähler für Watchdog in 20-ms-Zeiteinheiten

' ---------------------------------------------------------------------------
' Die Routine fuer den Software-Watchdog einbinden
' ---------------------------------------------------------------------------

INCLUDE "WD_OM.IIA"

' ---------------------------------------------------------------------------
' Das Hauptprogramm
' ---------------------------------------------------------------------------

#main

watchdogctr=100               'Zähler für Software-Watchdog initialisieren
UIRTofl=ON                    ' und Routine aktivieren.

PRINT "Programmstart"

DIM a BYTE                    'Zählvariable für das Hauptprogramm

FOR a=1 TO 10
  PRINT "Programm arbeitet. Zaehler: ";watchdogctr
  watchdogctr=100             'Zähler für Software-Watchdog resetten
  PAUSE 10
NEXT a

WHILE TRUE
  PRINT "Programm haengt fest. Zaehler: ";watchdogctr
  PAUSE 10
WEND

END

Hier der Inhalt von "WD_OM.IIA":

' --------------------------------------------------------------------------
' Software-Watchdog für die kleinen OM-Controller von Dietmar Harlos
' entwickelt mit OCBASIC 1.09a auf der Open-Macro am 28. November 2013
' --------------------------------------------------------------------------

' --------------------------------------------------------------------------

' User-Assemblerroutine im Timer Overflow Interrupt.

' Sie wird in den 20-ms-TIMER-Interrupt der OM eingebunden und deshalb
' 50 mal in der Sekunde aufgerufen.

' Das Schluesselwort INLASM kennzeichnet die folgende PROCEDURE als
' Assemblerroutine (IAR). Dadurch, und dass sie unmittelbar am Anfang
' des Programms steht, wird sie zu einer IIAR, also zu einer Assembler-
' Interruptroutine, die bei einem aktivierten User-Interrupt gestartet wird.

PROCEDURE iiar_tofl INLASM

! cbeqa #iTOFL,iiar_tofl_istofl 'falls kein Timer Overflow Interrupt,
! jmp iiar_tofl_ende+2        ' dann zur naechsten IIAR in der Kette

#iiar_tofl_istofl
! dbnz watchdogctr,iiar_tofl_return
! lda $fffe
! pusha
! poph
! ldx $ffff
! jmp ,x                      'Sprung zum Resetpoint

#iiar_tofl_return
! clc
! rts

END PROCEDURE

#iiar_tofl_ende              'hier hinter beginnt die naechste IIAR
                              '(sofern vorhanden)

' ---------------------------------------------------------------------------

Viel Spaß mit den OM-Controllern

Dietmar

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

 Antwort schreiben

Bisherige Antworten: