Problem mit scanf und zu kurzem Befehl

OP #7663751
Lesenswert?
• ▲
▼

Hallo zusammen,

auf einem Atmega644 bekomme ich per serieller Schnittstelle einen normalerweise 8-stelligen Befehl, den ich über scanf einlese. Solange der Befehl genau 8 oder mehr Zeichen hat, funktioniert alles gut, wenn der Befehl, evtl. auf aufgrund eines Übertragungsfehlers, nur 7 Zeichen hat, hängt sich meine Anwendung auf.

char commandBuffer[COMMAND_LENGTH]; memset(commandBuffer, 0, sizeof(commandBuffer));

if (rx_counter0) { scanf("%8s", commandBuffer); }

Wie kannn ich möglichst einfach die scanf-abändern, damit das Gerät nicht in einer Dauerschleife bleibt? Anscheind wartet scanf auf das achte Zeichen, dass nicht kommt.

Vielen Dank schon mal für eure Hilfe Michael

#7663803
Lesenswert?
• ▲
▼

Michael F. schrieb:

Wie kannn ich möglichst einfach die scanf-abändern, damit das Gerät nicht in einer Dauerschleife bleibt

Gar nicht.

So lange du kein Endezeichen hast, wie \r\n , weiss er ja nicht dass nach 7 Zeichen Ende sein soll.

Es gibt Systeme mit Timeout, z.B. MODBUS, wenn da die Pause nach einem Zeichen zu lang wird, interpretiert man das als Übertragungsende, aber das kann scanf nicht.

#7664127
Lesenswert?
• ▲
▼

scanf liest von stdin und ist damit von dessen Implementierung abhängig. Du mußt Dir zuerst ein Protokoll ausdenken, woran Deine Empfangsroutine eindeutig das Ende einer Nachricht erkennen kann. Und dann liest Du die Nachricht in einen Puffer ein und übergibst den Puffer an sscanf. sscanf wartet nicht, sondern gibt die Anzahl fehlerfrei gelesener Argumente zurück.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.