Re: Programm bleibt stehen Kategorie: Programmierung (von Thomas - 4.01.2005 10:01) | ||
Als Antwort auf Programm bleibt stehen von Horst - 3.01.2005 20:57 | ||
| ||
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. 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); } .... 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. 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(); } } Die Funktion doDebugMsg sollte dann noch die Systemzeit mit ausgeben. 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(); } } 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 | ||
Antwort schreiben Antworten: Re: Programm bleibt stehen (von Horst - 13.01.2005 13:26) |