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 

 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: