Compileroptimierung selektiv abschalten;

Gast #3252999
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--;
      }
  }
Gast #3253003
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.
Gast #3254103
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.
#3254144
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?
Gast #3254614
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!

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