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 | ||
| ||
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) |