Hi, mache gerade meine ersten Schritte mit WINARM + LPC2148. Ich habe folgendes Hauptprogramm: int main(void) { … uart_Puts("test\r\n"); print_int(1245); while(1); { /*FIO0SET = ( 1<<11); // Pin 11 auf HIGH schalten f = sinf(1.6); f *= 100; print_int((int) f); FIO0CLR = ( 1<<11); // Pin 11 auf low schalten for (x=0; x<1000000; x++) { asm("nop"); }*/ return (1); } Wenn ich alles mit 0 Optimiere funktioniert alles bestens. Bei s Optimierung habe ich bei einer leeren Endlosschleife (wie oben) ein komisches Verhalten: print_int(1245) wird nicht einmal ausgeführt sonder ständig. Dann kommt es zum Überlauf meines UART Puffers Erst wenn ich wieder den auskommentierten Code in der while Schleife aktiviere, funktioniert wieder alles einwandfrei mit s Optimierung. Bei 0 Optimiere funktioniert es einwandfrei egal ob leere while Schleife oder nicht. Hat jemand eine Idee woran das liegen könnte? Gruß Bernd
> uart_Puts("test\r\n"); > print_int(1245); > > while(1); ^ > {
Von dem while-Problem mal abgesehen: Deine "Warteschleife" wird als überflüssig erkannt und wegoptimiert. Infolgedessen startet das Hauptprogramm in steter Folge neu.
Ich bereue inzwischen meine erste Antwort ;-) Das vermeintliche "Listing" ist kein Listing. Es etwas zusammengehacktes. Und das genau dieses Etwas hat nie einen Compiler geschweige denn einen µC gesehen. Die Zeile mit ..., sporadische ; die obskure /* */ Ausklammerung des ganzen Schleifenrumpfs, komplett fehlende Codeteile für selbstgeschriebene Funktionen sowie die fehlende } sprechen eigentlich eine klare Sprache: Es ist nicht die Mühe wert, dass man Hirnschmalz in diese Ansammlung von Zeichen reinsteckt. Schade, Bernd. Garbage in => Garbage out. Das gilt auch für Fragen und Antworten. Meiner Meinung nach wird dich keine der obigen Antworten bei deinem eigentlichen Problem weiterbringen. Ich muss mir einen Knoten ins Ohr machen, nicht mehr auf solche Sachen zu antworten. Andere sind hier offensichtlich schlauer gewesen.
Also mein Programm hat natürlich keine richtige Funktion. Es ging nur darum die Geschw. für Sinusberechnung zu ermitteln und uart Ausgabe zu testen OK es muss heißen: int main(void) { ... ... uart_Puts("test\r\n"); print_int(1245); while(1) { for (x=0; x<10; x++) { asm("nop"); } } return (1); } Die While Schleife darf nicht leer sein, sonst kommt es zu dem oben beschrieben Fehlverhalten. Von daher finde ich es schon ein ernstzunehmende Frage. Trotzdem danke für eure Antworten.
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.