Hi Leuts, ich habe hier ein kleines Problem, für das sicher jemand eine Lösungsidee hat: Mein Mega16 kommuniziert via RS232C mit einem Messgerät. Der Telegrammaufbau ist ganz einfach, solange ein Gerät angeschlossen ist geht das auch problemlos, ich lese einfach Zeichen für Zeichen ein. Eine Antwort vom Messgerät gebinnt mit <CR><LF> und endet auch so. Deshalb habe ich im Programm ganz einfach while-schleifen, also: while ((c == UART_NO_DATA) || (c != '\r')) c = uart_getc(); // als naechstes kommt ein "\n" while ((c == UART_NO_DATA) || (c != '\n')) c = uart_getc(); Das Problem ist folgendes: Wenn keine Verbindung zustand kommt, bleibt der Controller logischerweise dort hängen. Auf immer und ewig, zumindest bis zum nächsten Reset. Hat jemand eine Idee, wie man hier eine vernünftige Timeout-Überwachung einbaut ? Greets Karlheinz
Ich verwende dafür eine int oder long Variable die in der Schleife runtergezählt wird. Ist diese Null wird die Schleife abgebrochen und ein Timeout erzeugt. Ist nicht die sauberste Lösung, funktioniert aber sicher.
Die 'saubere' Lösung ist m.E., einen Input-Puffer zu verwenden, der auf vorhandene Zeichen abgefragt wird. Ist nichts da, gut; wenn doch, Zeichen schrittweise umschaufeln (String aufbauen), bis Endkriterium erkannt ist.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.