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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.