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


von Anwender (Gast)


Lesenswert?

ich nutzte momentan die UART zur Kommunikation
1
  uint8_t i=0;
2
  char c;
3
  char* s;
4
  char string[length+1];
5
  s=string;
6
  do
7
  {
8
    c=uart_getc();    
9
    if (c!='\r') 
10
     {
11
      *s=c;      
12
      uart_putc( c );    
13
      s++;
14
      i++;
15
     }       
16
  }
17
  while( i!=length && c!='\r');
18
  //s++;
19
  *s=0;   //ende null schreiben
20
  uart_puts( "\r\n" );
21
22
  uart_puts( " eingegebender Text: " );
23
  uart_puts( string );
24
        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???

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Anwender (Gast)


Lesenswert?

ich nehm hyperterminal für die Kommunikation

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dann nimm doch mal das von mir erwähnte Programm.

von Anwender (Gast)


Lesenswert?

ok, nach der stringausgabe
1
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
1
uart_puts( "\r\n" );
die oberen "Zeilenumbrüche" haben aber alle geklappt, was ist falsch???

von Stefan (Gast)


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:
1
// ...
2
while(1)
3
{
4
  s = string;
5
  i = 0;      // !!!
6
7
  do
8
  {
9
    c = uart_getc();    
10
    if (c != '\r') 
11
     {
12
      *s = c;      
13
      uart_putc( c );    
14
      s++;
15
      i++;
16
     }       
17
  }
18
  while( i != length && c != '\r');
19
20
  *s = 0;   //ende null schreiben
21
  uart_puts( "\r\n" );
22
23
  uart_puts( " eingegebender Text: " );
24
  uart_puts( string );
25
  uart_puts( "\r\n" );
26
}
27
// ...

  

von Anwender (Gast)


Lesenswert?

ok, mit endlosschleife funktionierts
im prinzip war
1
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 ???

von blaa (Gast)


Lesenswert?

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

von Anwender (Gast)


Lesenswert?

danke, werd ich ab jetzt machen, wusst ich noch net

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
Noch kein Account? Hier anmelden.