Forum: Compiler & IDEs Frage: AVR-GCC


von Bernd (Gast)


Lesenswert?

Keine Variablen in _delay_us mehr erlaubt? Seit welcher AVR-GCC Version 
ist das so?
1
_delay_us (width + 150);  // (width + 150) µs warten

von Nase (Gast)


Lesenswert?

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.

von Oliver S. (oliverso)


Lesenswert?

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

von test (Gast)


Lesenswert?

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.

von Bernd (Gast)


Lesenswert?

Das ging ca. 2010 mit WINAVR.

von hufnala (Gast)


Lesenswert?

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

von Oliver S. (oliverso)


Lesenswert?

Bernd schrieb:
> Das ging ca. 2010 mit WINAVR.

Das ging auch damit nicht.

Oliver

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?


von Ingo Less (Gast)


Lesenswert?

Johan kannst du nicht wirklich mal den 5er GCC mit allem nötigen Kram 
bauen und online stellen???

von Ingo Less (Gast)


Lesenswert?

Johann meinte ich

von Peter D. (peda)


Lesenswert?

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.