mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Echtes ende eines UART Strings


Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe eine Frage. Wie ist das ofizielle Ende eines RS232 Strings.
Ich schicke von einem ATMEL meine strings immer so:
void uart0_putc(char c)
   {
   while(!(UCSRA & (1<<UDRE)));
   UDR=c;
   }
void uart0_puts(char *s)
   {
   while (*s)
      {
      uart0_putc(*s);
      s++;
      }
   uart0_putc('\r');
   uart0_putc('\n');
   }
Nur wenn ich das so mache und ich ein Windows Programm schreibe
Erkennt Windows in meinem selbst geschriebenem Programm das Ende des 
Strings nicht. Aber nur in dem selbst geschriebenen Programm.
Beim HyperTerminal funktioniert es einwandfrei.

Sollte man nach einer RS232 Übertragung noch das '\0' Zeichen senden?
Also folgendermaßen:
void uart0_puts(char *s)
   {
   while (*s)
      {
      uart0_putc(*s);
      s++;
      }
   uart0_putc('\r');
   uart0_putc('\n');
   uart0_putc('\0');
}

Weiß jemand eine Antwort?

Autor: Wetterer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein UART kennt keine Strings, ein UART kennt ausser byte gar nichts. 
RS232 kennt auch keine Strings Was Du suchst ist ein Moeglichkeit, dem 
Empfaenger das Ende eines Datentypen klar zu machen. Moeglicherweise ist 
es eine Null, moeglicherweise was anderes. Was macht ser Empfaegner denn 
?

Autor: Wetterer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hyperterm wird auf <CR><LF> einen Zeilenumbruch machen.

Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Richtig.
Der Empfänger ein PC mit einem Windows Programm macht folgendes:
ReadFile (hCom, &InString, sizeof (InString), &dwRead,NULL);
Damit empfange ich eine String nach in InString.
Nur weiß ich nicht wie groß die Anzahl der Empfangene Bytes gewesen 
sind.
Gut ich weiß es schon da ich mir selber bytes schicke. Aber der 
Datenstrom kann unterschiedlich sein?
Wie kann man das herausfinden.

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hängt einfach nur davon ab, wie du deine Applikation programmierst.
Also was sie erwartet.

Bei einem String gibts das mehrere Möglichkeiten Anfang, Ende, Länge
zu kennzeichnen:

1. Ende mit <CR> oder <CR><LF>
2. Nullterminiert mit <NULL>
3. Verpackt in <STX>MeinString<ETX>
4. Ganz eigenes Protokoll, welches den Datentypen oder die Datenlänge
   vorneweg schickt.
5. und und und

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vergiß meine Antwort, da hattest du das mit ReadFile noch nicht 
geschrieben...

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einfach ein Timeout setzen, fertig.

Autor: rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die industrielle Loesung ist immer ein definiertes Datenpacket zu 
verwenden. Dies hat in der Regel die Laenge im Header. Zb :
http://www.ibrtses.com/embedded/shortmsgprotocol.html
Wenn man die Laenge des Packetes hat muss man nur noch zaehlen. Eine 
fuer Dich meoglicherweise brauchbare alernative waere die Stringlaenge 
vorneweg zu senden.

Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@rene
Muss ich mal ausprobiren. Ich denke ich werde das auch so machen

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alternativ kannst du das Ende des Strings auch mit einem bestimmten 
Zeichen, z.B. \0 oder sowas markieren. Erfordert dann aber auch 
zeichenweises auslesen mittels ReadFile().

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.