www.mikrocontroller.net

Forum: Compiler & IDEs Problem mit \r\n???


Autor: Anwender (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich nutzte momentan die UART zur Kommunikation
  uint8_t i=0;
  char c;
  char* s;
  char string[length+1];
  s=string;
  do
  {
    c=uart_getc();    
    if (c!='\r') 
     {
      *s=c;      
      uart_putc( c );    
      s++;
      i++;
     }       
  }
  while( i!=length && c!='\r');
  //s++;
  *s=0;   //ende null schreiben
  uart_puts( "\r\n" );

  uart_puts( " eingegebender Text: " );
  uart_puts( string );
        uart_puts( "\r\n" );
ich hab hier aber anscheinend irgendwo einen riesen Denkfehler, da wenn 
ich die Ausgabe zum Rechner mache (ganz am Schluss) erscheint vor derm 
"e" von " eingegebener Text:" ein sonderbares Zeichen
schreiben ich statt uart_puts( "\r\n" ); einfach mal uart_puts( "\n\r" 
); so erscheint dieses am Ende
Das wunderliche ist, wenn ich die gesamte Zeiche mit " eingegebener.." 
auskommentiere bzw. lösche, dann klappt es auf einmal

Wo ist der Denkfehler???

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was heißt "wenn ich die Ausgabe zum Rechner mache"? Verwendest Du ein 
Terminalprogramm, verwendest Du ein selbstgebasteltes Programm?

Mal einen Hexdump der vom PC empfangenen Daten angesehen? Das geht mit 
dem "Terminal"programm hterm von Tobi (www.der-hammer.info) ganz gut.

Autor: Anwender (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich nehm hyperterminal für die Kommunikation

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann nimm doch mal das von mir erwähnte Programm.

Autor: Anwender (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, nach der stringausgabe
uart_puts( string );
 kommt noch \r (hex 0D) und danach hex 8A
eigentlich sollte da 0A für \n drinstehn, kommt aber nicht
also liegts am letzten
uart_puts( "\r\n" );
die oberen "Zeilenumbrüche" haben aber alle geklappt, was ist falsch???

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist immer schlecht, wenn nicht das ganze Programmlisting zur 
Verfügung steht.

Was kommt hinter dem letzten uart_puts( "\r\n" ); ? Ein return von 
main()? Drehst du der UART just beim letzten zu versendenden 
Null-Datenbit den Hahn ab?

Pack mal den Code in eine Endlosschleife:
// ...
while(1)
{
  s = string;
  i = 0;      // !!!

  do
  {
    c = uart_getc();    
    if (c != '\r') 
     {
      *s = c;      
      uart_putc( c );    
      s++;
      i++;
     }       
  }
  while( i != length && c != '\r');

  *s = 0;   //ende null schreiben
  uart_puts( "\r\n" );

  uart_puts( " eingegebender Text: " );
  uart_puts( string );
  uart_puts( "\r\n" );
}
// ...

  

Autor: Anwender (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, mit endlosschleife funktionierts
im prinzip war
uart_puts( "\r\n" );
mein letzter Befehl in der main (neben noch return 0) und das nimmt mir 
die uart anscheinend übel, versteh nur nicht ganz warum
kann es sein, das das programm schneller "beendet" ist, als das etwas 
gesendet werden kann ???

Autor: blaa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wohin soll main() den returnen? Es wird empfohlen ein while(1); oder ein 
for(;;); vor das return 0; zu packen.

Autor: Anwender (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke, werd ich ab jetzt machen, wusst ich noch net

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.