Forum: Compiler & IDEs Pause Routine


von Axos (Gast)


Lesenswert?

Hi!
Ich hab folgende routine geschrieben:

void sleep()
{
for (int i = 0;i < 6400;i++)
  asm volatile("nop");
}

Die lass ich aufm ATMega16 laufen mit interner frequenz (1Mhz)

wie lange dauert es nun bis diese routine abgearbeitet ist ? weil die
vergleiche und das inkrementieren verbrauchen ja auch zeit.

MfG Axos

von mthomas (Gast)


Lesenswert?

Im Zweifel hilft ein Blick in den erzeugten Assembler code (lss-Datei).
Dort steht, was der Compiler aus der Schleife gemacht hat. Zusammen mit
der AVR-Befehlsreferenz, in der fuer jeden Assembler-Befehl die Zahl der
benoetigten Zyklen angegeben ist, kann man sich dann selbst ausrechnen,
wie viele Zyklen ein Schleifendurchlauf braucht. Zusammen mit dem
Systemtakt erhaelt man dann die "Laufzeit".
(Und der "uebliche Ratschlag": wenn's genau sein soll, lieber einen
AVR-Timer nutzen oder "im Notfall" inline-Assembler bei
abgeschalteten Interrupts. Zu Letzterem vgl. avr/delay.h und die - noch
spaerlichen - Informationen im wiki/avr-gcc-Tutorial.)

von Axos (Gast)


Lesenswert?

Hi ! Danke Schonmal !
ich hab mal ein bisschen im internet rumgeschaut und wenn ich das
richtig verstanden habe kann man mit dem avr-studio messungen machen.
kann mir jemand sagen wie ich das machen ?

MfG Axos

von Thorsten (Gast)


Lesenswert?

Hallo,

im AVR Studio links im Workspace unter Processor gibts die "Stop
Watch", Doppelklick darauf setzt sie auf Null. Aber nicht vergessen
vorher in den AVR Simulator Options die richtige Taktfrequenz
einzustellen, sonst stimmen logischerweise die angezeigten Zeiten
nicht.

Thorsten

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.