Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Reset durch Watchdog Kategorie: Programmierung (von Jörg C. - 15.10.2007 22:10)
Als Antwort auf Reset durch Watchdog von Hansi - 14.10.2007 15:31
Ich nutze:
C-Control II Station, eigenes Board, OSOPT V3.1
Hallo Hansi,

ich glaube, da kann ich Dir helfen - ich hatte das selbe Problem.

Im Modul pcf8583.c2 läuft ein thread watchdog, und hier gibt's m.E. ein Problem mit dem �berlauf
der long Variable tm.

André hat hier
http://www.cc2net.de/Foren/CC2Net_Forum/lesen.php?eintrag=9924

auf das Problem hingewiesen, und ist prompt selbst in die Falle getappt. Darauf bin allerdings
auch erst nach viel verzweifeltem Debugging gestossen (und jetzt einigen grauen Haaren mehr ;) )

Ich habe bei mir folgenden Code am Laufen (seit dem ohne die von Dir erwähnten Reboots):


// - patched version - 12.12.06 JC --
thread watchdog
{long tm;
 resetWD();
 tm=system.timer();
 loop
 {
  if (system.timer()-tm)>=(timeout*500)
   {
    resetWD();
    tm=system.timer();
   }
  yield;
  if enHostKey if ports.getHostkey() Hostmode(1);//Abfrage der Host-Taste
 }
}

/* - original version: problem bei timer Ã?berlauf!!  --
thread watchdog
{long tm;
 resetWD();
 tm=system.timer()/500;
 loop
 {
  if (system.timer()/500)-(timeout)>=tm
   {
    resetWD();
    tm=system.timer()/500;
   }
  yield;
  if enHostKey if ports.getHostkey() Hostmode(1);//Abfrage der Host-Taste
 }
}
*/



Hoffe, das hilft Dir.

Viele Grüsse,
Jörg C.


> Hallo Zusammen,
> ich suche seit einer Ewigkeit einen Fehler in meinem Programm. Der Watchdog setzt alle
> ca. 26 Tage mein Programm zurück. Mit einer 2.Unit und einem einfachen Testprogramm versuche
> ich den Fehler zu finden. Ob sich jemand erbarmt einem Ratlosen zu helfen? Ã?ber die Suche Funktion
> habe ich nichts gefunden was mir hilft.
>
> Aktive Module: vmcodes, constant, system, ports, i2c,
> pcf8583,  pcflcd
> Alle sind nach Andreès Seite Module und Funktionen auf dem
> neuesten Stand.
> Den Watchdog habe ich vorher in meiner Wintergarten Steuerung
> eingesetzt. Hiervon sind noch Werte gespeichert nach dem Muster:
> pcf8583.writeint(100,jal.TempAirInDoorOpen);
> pcf8583.writeint(102,jal.TempAirOutDoorOpen);
>
>
> Hier der Code des Testprogramms:
>
>
> byte ResetMarker;  // Anzahl der ausgeführten Reset
> int  L2;
> int  watchdog;     // Rückgabe Wert init Watchdog
>
> //*************************************
> thread test1
> //*************************************
> {
>   L2=L2+1;
>   pcflcd.goto(1,0);pcflcd.zahl(L2);sleep 200;
> }
>
> //*************************************
> thread main
> //*************************************
>  WatchDog=pcf8583.init(1,1,1,40,1);
>  pcflcd.setpcf(0);pcflcd.init();pcflcd.clear();
>  if WatchDog > 0
>  {
>    if WatchDog==128  // (reset ausgeführt)
>    {
>      pcflcd.goto(1,0);pcflcd.print("Reset durch Watchdog");
>      ResetMarker=ResetMarker+1;pcf8583.writebyte(19,ResetMarker);
>      pcflcd.goto(2,0);pcflcd.print("Anzahl");pcflcd.zahl3(ResetMarker);
>      pcflcd.goto(3,0);pcflcd.zahl2(system.hour());pcflcd.print(":");
>      pcflcd.zahl2(system.minute());pcflcd.print(":");
>      pcflcd.zahl2(system.second());
>      pcflcd.goto(4,0);pcflcd.zahl2(system.day());pcflcd.print(":");
>      pcflcd.zahl2(system.month());halt;
>    }
>    if WatchDog==255
>    {
>      pcflcd.goto(2,0);pcflcd.print("Watchdog ok         ");sleep 1000;
>    }
>  }
>  pcflcd.goto(1,0);pcflcd.print("Start=");pcflcd.zahl2(system.day());
>  pcflcd.print(":");pcflcd.zahl2(system.month());
>  pcflcd.goto(2,0);pcflcd.zahl2(system.hour());pcflcd.print(":");
>  pcflcd.zahl2(system.minute());pcflcd.print(":");
>  pcflcd.zahl2(system.second());
>  sleep 1000;
>  run test1;
>  halt;
> }
>
>

>


    Antwort schreiben


Antworten:

Re: Reset durch Watchdog (von André H. - 17.10.2007 8:18)
    Re: Reset durch Watchdog (von Jörg C. - 17.10.2007 21:41)