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

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.