Keine Variablen in _delay_us mehr erlaubt? Seit welcher AVR-GCC Version ist das so?
1 | _delay_us (width + 150); // (width + 150) µs warten |
|
Forum: Compiler & IDEs Frage: AVR-GCCKeine Variablen in _delay_us mehr erlaubt? Seit welcher AVR-GCC Version ist das so?
Bernd schrieb: > Keine Variablen in _delay_us mehr erlaubt? Seit welcher AVR-GCC Version > ist das so? M.W.n. war das schon immer so. D.h., erlaubt sind sie schon, aber es kommt nicht das dabei heraus, was du erwartest mangels Gleitkomma-Optimierung... Mach ne Schleife und warte in 1us-Schritten oder so. AVR-gcc kennt kein delay. Das kommt mit der avrlibc. Ansonsten wage ich mal die Gegenfrage, wann das denn deiner Meinung nach nicht so war? Oliver Seit wann? Das ging noch nie. Wenn man sich anschaut wie das funktioniert wird auch klar warum. Der macht ja nichts anderes als ein Makro aufzublättern und berechnet aus dem Systemtakt und der (als Konstante übergebenen) Wartezeit eine Schleife nop's. Hi, ich glaube ich hatte da anfangs Probleme dass die Funktion keine Variablen akzeptiert hat. Habe dann alles bei mir auf Timer umgestellt. Die Fehlermeldung war auch entsprechend. Was sagt die bei Dir. //hufnala Bernd schrieb: > Das ging ca. 2010 mit WINAVR. Nein. Wie test schon schrieb: Das ist ein Makro. Und das wird zur Compilezeit in eine NOP-Schleife umgerechnet. Wie soll das mit Variablen, deren Inhalt zur Compilezeit gar nicht bekannt sind, gehen? Benutze den unbequemeren, aber richtigeren Weg und benutze einen Timer. Dafür sind sie schließlich da. Oliver S. schrieb: > AVR-gcc kennt kein delay. Doch, schon. Heißt da allerdings __builtin_avr_delay_cycles, und das schon ab 4.7 (aktuell ist v5). Im Gegensatz zu einer Implementierung per Inline-Assembler wirft obiges Builtin einen Fehler, wenn das Argument nicht zur Compilezeit bekannt ist. Johan kannst du nicht wirklich mal den 5er GCC mit allem nötigen Kram bauen und online stellen??? Bernd schrieb: > Das ging ca. 2010 mit WINAVR. Das ging noch nie. Bei Variablen wurde die float-Lib eingebunden, d.h. das Delay wurde viiiiiiieeeeel länger. µs kannste vergessen. Nur weil der Compiler durchläuft, ist etwas lange noch nicht korrekt. 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.
|
|