www.mikrocontroller.net

Forum: Compiler & IDEs GNUARM Probleme mit UART Routine


Autor: Martin (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Habe Problem mit der angehängten UART Routine (ursprünglich von Keil).
Das ganze läuft auf einem LPC21xx.

Zum einfachen Test gebe ich kontinuierlich alle 0,5s die Zeichen aus:
uart_putchar('0');
uart_putchar('1');
uart_putchar('2');
uart_putchar('3');
uart_putchar('4');
uart_putchar('5');
uart_putchar('6');
uart_putchar('7');
uart_putchar('8');
uart_putchar('9');
uart_putchar('a');
uart_putchar('b');
uart_putchar('c');
uart_putchar('d');
uart_putchar('e');
uart_putchar('f');
uart_putchar('g');
uart_putchar('h');
uart_putchar('i');
uart_putchar(13); //Carriage return
uart_putchar(10); //line feed

Wenn ich mit Optimierungs-Level 0 kompiliere funktioniert es.
Hyperterminal gibt mir die Zeichen aus:
0123456789abcdefghi
0123456789abcdefghi
0123456789abcdefghi usw.

Wenn ich Level Optimierungs-Level s benutze ist die Ausgabe nicht 
richtig.
Hyperterminal Ausgabe:
00000000000000000123456789abcdefghi
0000000000000000000123456789abcdefghi
000000000000000000123456789abcdefghi
0000000000000000123456789abcdefghi
0000000000000000123456789abcdefghi

Hat jemand eine Ahnung woran das liegen könnte?

Autor: Martin Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Testweise ein volatile zur Deklaration der struct buf_st Objekte

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Hinweis.
Macht aber leider keinen unterschied.

Ich hätte oben bei Level s die Ausgabe genauer beschreiben sollen.
Die erste Ausgabe erscheint richtig.
0123456789abcdefghi
in der nächsten Zeile werden dann 0er angezeigt
0000000000000000 und dann wieder 0123456789abcdefghi angehängt.
Also:
00000000000000000123456789abcdefghi usw.

Die Anzahl der Nuller variiert.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich anstatt  uart_putchar('0'); uart_putchar('W'); schreibe

ist die Ausgabe bei Level s:
WWWWWWWWWWWWWWWWW123456789abcdefghi

Also gibt es irgedwie ein Problem mit dem Ringspeicher?

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok scheint ein bug mit der while Schleife zu sein bei Level s 
Optimierung.

Wenn ich asm volatile("nop"); vor der While Schleife einfüge 
funktioniert es mit Level s.

uart_putchar('q');
asm volatile("nop");


  while(1)

  {

    if(zeit_flag==1)
    {
      zeit_flag = 0;
      uart_putchar('W');
      uart_putchar('1');
      uart_putchar('2');
      uart_putchar('3');
      uart_putchar('4');
      uart_putchar('5');
      uart_putchar('6');
      uart_putchar('7');
      uart_putchar('8');
      uart_putchar('9');
      uart_putchar('a');
      uart_putchar('b');
      uart_putchar('c');
      uart_putchar('d');
      uart_putchar('e');
      uart_putchar('f');
      uart_putchar('g');
      uart_putchar('h');
      uart_putchar('i');
      uart_putchar(13); //Carriage return
      uart_putchar(10); //line feed
    }

  }

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.