mikrocontroller.net

Forum: Compiler & IDEs Delay aus delay.h


Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 );
}

Autor: JojoS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Werner B. (Gast)
Datum:

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

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ne. die CPU Clock ist richtig eingestellt.

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.