mikrocontroller.net

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


Autor: tobelix (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Walter (Gast)
Datum:

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

Autor: tobelix (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

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.