Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Hallo Horst, > > > Die Steuerung läuft tadellos bis auf die Tatsache dass nach einiger Zeit sich die Steuerung aufhängt. > > Sobald der Thread für die Temperaturerfassung nicht gestartet wird läuft die Steuerung. Wird der > > Temperaturthread gestartet steht die Steuerung ab und zu nach einigen Minuten jedoch spätestestens > > einigen Stunden. > > anhand des geposteten Ausschnittes ist es recht schwer zu beurteilen. Könnte es sein, dass Du > mit den Captures in einen Deadlock läufst - also bei gesetztem global.pf nochmals in einer der > aufgerufenen Unterfunktionen versuchst das Flag zu capturen? > > Hast Du die Möglichkeit z.B. über die serielle Schnittstelle und ein Terminalprogramm Testausgaben > anzuzeigen? Wenn ja, würde ich versuchen an den kritischen Stellen (capture, release, Funktionseintritt > und Funktionsende) Debug-Ausgaben einzubauen. > > <code> > int debugLevel; // 0 = keine Debug-Ausgabe 9 = max. DebugAusgabe > ... > debugLevel = 3; > .... > function Modemstatus() returns int > { > if debugLevel > 2 doDebugMsg ("Modemstatus: Enter"); > long erg; > if debugLevel doDebugMsg ("Modestatus: capture global.pf"); > capture global.pf; > twb.init(); > erg = twbs.rw_frame(0, allg.Modem_Adresse, 0, 0, 0); > if debugLevel doDebugMsg ("Modestatus: release"); > release; > if debugLevel > 2 doDebugMsg ("Modestatus: Leave"); > return (erg); > } > .... > </code> > > Den debugLevel könntest Du dann zur Laufzeit durch einfache Zeichencodes (an der Stelle an der auch > das Einleiten des Hostmode geprüft wird) über das Terminalprogramm steuern. > > <code> > thread rControl { > byte c; > loop { > wait hwcom.rxd(); > c = hwcom.get(); > if debugLevel > 5{ > string s; > s = "RS232 RCV: "; > str.putint (s, c); > doDebugMsg (s); > } > > if c == 254 { > wait hwcom.rxd(); > if hwcom.get()==254 quit 1;// Hostmode einleiten > } else > if c == 48 { > // debugLevel 0 > debugLevel = 0; > s = "Set debugLevel to: 0"; > doDebugMsg (s); > } else > if c == 49 { > // debugLevel 1 > debugLevel = 1; > s = "Set debugLevel to: 1"; > doDebugMsg (s); > } else > if c == 50 { > // debugLevel 2 > debugLevel = 2; > s = "Set debugLevel to: 2"; > doDebugMsg (s); > } else > if c == 51 { > // debugLevel 3 > debugLevel = 3; > s = "Set debugLevel to: 3"; > doDebugMsg (s); > } else > if c == 52{ > // debugLevel 4 > debugLevel = 4; > s = "Set debugLevel to: 4"; > doDebugMsg (s); > }; > hwcom.flush(); > } > } > </code> > > Die Funktion doDebugMsg sollte dann noch die Systemzeit mit ausgeben. > <code> > function doDebugMsg (string s){ > system.TIME time; > string debugString; > > if (debugLevel){ > system.gettime (time); > debugString=""; > str.putintf(debugString, time.hour, 2); > debugString = debugString + ":"; > str.putintf(debugString, time.minute, 2); > debugString = debugString + ":"; > str.putintf(debugString, time.second, 2); > debugString = debugString + " ["; > str.putlong(debugString, system.timer()); > debugString = debugString + "] : "; > hwcom.print(debugString); > debugString = s; > hwcom.print (debugString); > hwcom.ret(); > } > } > </code> > > > Ich hoffe die Anregung ist für Dich nützlich und Du kannst den Fehler so lokalisieren. Ich selbst habe > damit sehr gute Erfahrung gemacht. > > Beste Grüße > Thomas > > >