Delay aus delay.h

Gast #182288
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 );
}
Gast #182289
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.
Gast #182293
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren