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 ); }
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.
> Die Zusätzliche 100µs dürften die Rechenzeit der FP > Multiplikation sein. Deswegen sollte man diese Funktion nur mit Compile-Time-Konstanten aufrufen.
ist evtl. die Prozessorfrequenz im Emulator nur auf 4MHz eingestllt? (default Voreinstellung)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.