www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timeout beim Mega16 UART


Autor: Karlheinz Druschel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.