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?
Testweise ein volatile zur Deklaration der struct buf_st Objekte
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.
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?
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
}
}
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.