Forum: Compiler & IDEs uart_puts ("...") gibt plötzlich ein 'R' aus


von tobelix (Gast)


Lesenswert?

Hallo,

ich hab mal eine Frage folgende uart_puts()-Implementierung betreffend. 
Ich verwende:

void uart_puts (const char *s)
{
    while (*s)
    {
        uart_putc(*s);
        s++;
    }
}

... mit ...

void uart_putc( unsigned char data )
{
  while ( !(UCSRA & (1<<UDRE)) );

  UDR = data;
}

Wenn ich eine ganze Reihe von Strings mit uart_puts() übertrage um eine 
Art Menü im Terminal-Fenster zu erzeugen, unterbricht plötzlich die 
Übertragung und zeigt nur noch ein "R" am Ende, dass sich eigentlich im 
zu übertragenden String nicht befunden hat. Bei einer noch höheren 
Anzahl von zu sendenden Zeilen fängt plötzlich der ATMEGA8515L an 
fortlaufend die ganze ASCII-Tabelle wiederzugeben, wobei er jedes 
Zeichens mehrmals wiederholt. Ich nehme an, ich hab hier ein Problem mit 
irgendeiner Puffergröße?!

Kann mir jemand nen Tipp geben, wie ich da zu Rande komme?!

Vielen Dank schonmal für Eure Mühe.

Gruß

tobi

von Walter (Gast)


Lesenswert?

der Fehler ist in dem Programmteil den du uns nicht zeigst ...

von tobelix (Gast)


Lesenswert?

Ich habe also meine main-function und rufe nach der Initialisierung der 
UART folgende Funktion auf:

void input_Parameters(void)
{
  unsigned char c = 0;

  clr_screen();
   uart_puts ("*********************************************\r\n");
   uart_puts ("* Bitte geben Sie die Parameter ein:        *\r\n");
   uart_puts ("*                                           *\r\n");
   uart_puts ("*  c =                                      *\r\n");
   uart_puts ("*                                           *\r\n");
   uart_puts ("*  d =                                      *\r\n");
   uart_puts ("*                                           *\r\n");
   uart_puts ("*  J =                                      *\r\n");
   uart_puts ("*                                           *\r\n");
   uart_puts ("******* Bitte eine Nummer eingeben ! ********\r\n");


  while (c != 27)
    c = uart_getc();
}

Das Ergebnis ist, dass im Terminalfenster alle Ascii-Zeichen mit 
mehrfachen Wiederholungen der jeweiligen Zeichen im Stile von 
:11111111111122222222.... dargestellt werden und das in einem 
Endlos-Loop!

Wäre super, wenn jemand mir helfen könnte.

Viele Grüße.

tobi

von Peter D. (peda)


Lesenswert?

> Wenn ich eine ganze Reihe von Strings mit uart_puts() übertrage um eine
> Art Menü im Terminal-Fenster zu erzeugen, unterbricht plötzlich die
> Übertragung und zeigt nur noch ein "R" am Ende, dass sich eigentlich im
> zu übertragenden String nicht befunden hat. Bei einer noch höheren
> Anzahl von zu sendenden Zeilen fängt plötzlich der ATMEGA8515L an
> fortlaufend die ganze ASCII-Tabelle wiederzugeben, wobei er jedes
> Zeichens mehrmals wiederholt. Ich nehme an, ich hab hier ein Problem mit
> irgendeiner Puffergröße?!

Jo, Dein SRAM ist voll.
Du mußt die Strings im Flash definieren.


Peter

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.