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--; } }
Wenn Deine funktionslose Variable "dzi" als volatile deklariert wird, sollte sich das Optimierungsverhalten drastisch ändern.
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.
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.
Wer einen Delay braucht, hat µC-Programmierung nicht verstanden. Timer sind das Mittel der Wahl. Das hier ist kein PC mit Multitasking-Betriebssystem. Max
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.