WINARM: Problem mit Optimierungsstufe?

Gast #789053
Lesenswert?

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
Persönliche Seite #789337
Lesenswert?

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.
Gast #789386
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren