Forum: Mikrocontroller und Digitale Elektronik delay_ms AVRStudio


von Andreas S. (Firma: keine) (ovoron)


Lesenswert?

Hallo,

ich habe folgendes Problem.
Ich habe bislang immer mit WinAVR programmiert.
Jetzt habe ich ein Programm mal mit AVRStudio compiliert und 
festgestellt das die delay_ms() funktion nicht mehr funktionieren.

Woran liegt das?

MfG

Andreas

von Peter II (Gast)


Lesenswert?

Andreas S. schrieb:
> festgestellt das die delay_ms() funktion nicht mehr funktionieren.

und was heist das genau?

von Andreas S. (Firma: keine) (ovoron)


Lesenswert?

Hi,

beispiel
delay_ms(1000);
War vorher eine Wartezeit von 1000ms an der stelle. (WinAVR)
Jetzt Wartezeit 0ms(AVRStudio6)

von Peter II (Gast)


Lesenswert?

Andreas S. schrieb:
> beispiel
> delay_ms(1000);
> War vorher eine Wartezeit von 1000ms an der stelle. (WinAVR)
> Jetzt Wartezeit 0ms(AVRStudio6)

kann eigentlich nicht sein, wenn es länger ist dann würde die 
Optimierung ausgeschaltet sein. Sicher das du die offizielle delay 
funktion verwendest und nicht selber geschriebenes?

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

- Optimierung auf -Os stellen
- Nur konstante Werte als Parameter für _delay_ms() verwenden
- Korrekten Wert für F_CPU einstellen

von Peter II (Gast)


Lesenswert?

Frank M. schrieb:
> - Optimierung auf -Os stellen
> - Nur konstante Werte als Parameter für _delay_ms() verwenden

all das würde aber nicht dazu führen des es kürzer dauert, sonder es 
würde immer länger dauern.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Peter II schrieb:
> all das würde aber nicht dazu führen des es kürzer dauert, sonder es
> würde immer länger dauern.

Ich hatte nachträglich noch einen Punkt hinzugefügt:

- Korrekten Wert für F_CPU einstellen

Desweiteren soll der TO mal schauen, ob und welche Warnungen der 
Compiler ausgibt.

von Andreas S. (Firma: keine) (ovoron)


Lesenswert?

Hallo,

alles klar !! *ICHDOOF
es stand zuvor im Makefile !!
AVRStudio verwendet kein Makefile !!!
Und da ich folgendes in meinem Code stehen habe

#ifndef F_CPU
#define F_CPU 2000000UL
#endif

kam es dazu, das die falsche frequenz genommen wurde und keine 
Fehlermeldung ausgegeben wurde.

Vielen Dank für Eure Bemühungen.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Andreas S. schrieb:
> #ifndef F_CPU
> #define F_CPU 2000000UL
> #endif

Diese "Lösungen" sieht man öfters und sind leider - wie auch in Deinem 
Fall - der größte Mist.

Besser ist:

#ifndef F_CPU
#error F_CPU not defined.
#endif

Dann weiß man auch direkt, was hier fehlt.

von Embedded Noob (Gast)


Lesenswert?

Moin,

Im AVR-Studio heißt es: _delay_ms(1000);

und nicht vergessen die util.h zu includen.

MfG

von Embedded Noob (Gast)


Lesenswert?

Sorry, kleine Korrektur:

<util/delay.h> muss inkludiert werden.

Der Rest meiner vorschnellen Antwort sollte stimmen.

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.