www.mikrocontroller.net

Forum: Compiler & IDEs WINARM: Problem mit Optimierungsstufe?


Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> uart_Puts("test\r\n");
> print_int(1245);
>
> while(1);
          ^
> {

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Von dem while-Problem mal abgesehen: Deine "Warteschleife" wird als 
überflüssig erkannt und wegoptimiert. Infolgedessen startet das 
Hauptprogramm in steter Folge neu.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.