Forum: Mikrocontroller und Digitale Elektronik Compileroptimierung selektiv abschalten;


von interrupt (Gast)


Lesenswert?

Die nachfolgende Schleife erzeugt keine erkennbare Verzögerung, wenn sie 
mit dem mspgcc-Compiler für einen MSP430-Mikroprozessor übersetzt wird, 
auch wenn grosse Zahlen von z.B. 100000 übergeben werden.
Liegt vermutlich an einer automatischen Compileroptimierung.
Auch eine Deklaration der "dzi"-Variable als volatile hat nichts 
gebracht.
Wie kann man die Compiler-Optimierung innerhalb der Funktionm abschalten 
?

THX !

void delay_count(unsigned int l_dzi)
  {
    unsigned int dzi;
    dzi=l_dzi;
    while (dzi>0)
      {
        dzi--;
      }
  }

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wenn Deine funktionslose Variable "dzi" als volatile deklariert wird, 
sollte sich das Optimierungsverhalten drastisch ändern.

von Peter II (Gast)


Lesenswert?

interrupt schrieb:
> Wie kann man die Compiler-Optimierung innerhalb der Funktionm abschalten
> ?

suche lieber eine ordentliche Delay funktion in deiner 
entwicklungsumgebung. Soetwas sollte schon vorhanden sein.

man kann diese funktion in eine Extra C datei legen und für diese die 
optimierung abschalten.

von Der (Gast)


Lesenswert?

Verlängert ein NOP in der Schleife die Dauer?

von Ralph (Gast)


Lesenswert?

Mach aus deiner Zählvariable eine GLOBALE Volatile Variable.
Dann wird da nichts mehr wegoptimiert.

Eine Delayfunktion ist immer das letzte Mittel.
Die macht mehr Kaputt als gut.

Wenn es mehr als ein paar µsec Delay sein sollen ==> Timer verwenden.

von Max G. (l0wside) Benutzerseite


Lesenswert?

Wer einen Delay braucht, hat µC-Programmierung nicht verstanden. Timer 
sind das Mittel der Wahl.

Das hier ist kein PC mit Multitasking-Betriebssystem.

Max

von (prx) A. K. (prx)


Lesenswert?

Max G. schrieb:
> Wer einen Delay braucht, hat µC-Programmierung nicht verstanden.

Wer diese Aussage macht hat µC-Programmierung nicht verstanden.

Auf einem im unteren MHz-Bereich arbeitenden µC sind Delays im unteren 
µs-Bereich oft sinnvoller als Timer.

Längere Delays in ISRs sind ein Problem. Weshalb aber sollte es ein 
Problem sein, im Hauptprogramm Millisekunden oder gar Sekunden per Delay 
zu verbringen, wenn man ohnehin nichts besseres vor hat und es auf 
Präzision nicht ankommt?

von Peter II (Gast)


Lesenswert?

Max G. schrieb:
> Wer einen Delay braucht, hat µC-Programmierung nicht verstanden.

wer ein Delay an den passenden Stellen verwendet kann wirkich 
programmieren.

z.b. kurze zwartezeiten im µs bereich bei displays. Dafür einen timer zu 
verwenden ist unsinn.

von Der (Gast)


Lesenswert?

Peter II schrieb:
> Max G. schrieb:
>> Wer einen Delay braucht, hat µC-Programmierung nicht verstanden.
>
> wer ein Delay an den passenden Stellen verwendet kann wirkich
> programmieren.
>
> z.b. kurze zwartezeiten im µs bereich bei displays. Dafür einen timer zu
> verwenden ist unsinn.

Full ACK!

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
Noch kein Account? Hier anmelden.