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

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.