Problem mit \r\n???

Gast #524319
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???
Gast #524770
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???
Gast #524782
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
// ...

  
Gast #524794
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 ???

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren