Forum: Compiler & IDEs Delay aus delay.h


von Marcel (Gast)


Lesenswert?

Hi,

ich habe jetzt einige threads über die delay.h gelesen aber keine
antwort gefunden.

wennn ich das folgende programm im studio teste, sagt das studio die
funktion würde knapp 200us brauchen. Aber wieso? ich will doch nur
100us.

#define F_CPU 8000000UL  // 8 MHz

#include <avr/io.h>
#include <avr/delay.h>

volatile unsigned char test3 = 100;

int main( void )
{
    _delay_us(test3);

    return( 0 );
}

von JojoS (Gast)


Lesenswert?

so eine Ungeauigkeit habe ich auch schon bemerkt, das kommt daher das
die Verzögerung als Floatingpoint Wert berechnet wird. Die Zusätzliche
100µs dürften die Rechenzeit der FP Multiplikation sein.

von Chris (Gast)


Lesenswert?

> Die Zusätzliche 100µs dürften die Rechenzeit der FP
> Multiplikation sein.

Deswegen sollte man diese Funktion nur mit Compile-Time-Konstanten
aufrufen.

von Werner B. (Gast)


Lesenswert?

ist evtl. die Prozessorfrequenz im Emulator nur auf 4MHz eingestllt?
(default Voreinstellung)

von Marcel (Gast)


Lesenswert?

ne. die CPU Clock ist richtig eingestellt.

von Jörg Wunsch (Gast)


Lesenswert?

Chris hat gewonnen.

Diese inline-Funktionen funktionieren nur dann ``as designed'', wenn
du sie mit zur Compilezeit feststehenden Konstanten benutzt.  Hmm, da
habe ich wohl zu viel an Nachdenken über das Problem
vorausgesetzt...  Wenn du wenigstens mal einen ganz klitzekleinen
Blick in die Routinen wirfst, wirst du sofort feststellen, dass du mit
deiner Methode den armen AVR erstmal 100 µs lang eine
Gleitkommadivision rechnen lässt, bevor er endlich zur 100 µs
langen Schleife kommt.

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.