Forum: Compiler & IDEs Dauer eines For-Schleifen Durchlaufs


von WorkMännchen (Gast)


Lesenswert?

Hallo,

ich habe eine Frage...
wie lange dauert ein For-Schleifen Durchlauf? Also von x=1 bis x=2.

for(x=1; x<=25; x=x+1)
{
 if (GetResult()==1) doNext();
}


Die Frequenz ist 16MHz.

Danke für Hilfe!

von Stefan E. (sternst)


Lesenswert?

Woher sollen wir denn wissen, wie lange die Funktion GetResult (und ggf. 
auch noch doNext) brauchen?

von Martin L. (melvin_the_moose)


Lesenswert?

Das hängt von dem Maschinencode ab, den der Compiler daraus macht. Das 
wiederum ist im allgemeinen u.a. abhängig von der eingestellten 
Optimierungsstufe.
Im Beispiel werden noch Funktionen (oder Macros) verwendet, deren 
Laufzeit mit eingeht. Wenn das echte Funktionen sind und die etwas 
sinnvolles machen, haben diese sogar den größten Anteil an der Laufzeit.
Also, ohne Kenntnis dieser Funktionen ist gar keine Aussage möglich.
Man kann es entweder Messen (z.B. Portpin am Schleifenanfang Toggeln und 
die Ausführungszeit dieser Instrumentierung herausrechnen) oder Zählen 
(alle Instruktionen, die der Compiler ausspuckt, mit der jeweiligen 
Zyklenzahl werten) für letztere Methode muß noch die CPU-Clk bekannt 
sein (könnte ja heruntergeteilt sein...).

Gruß

Martin

von Roman Mittermayr (Gast)


Lesenswert?

Martin hat Recht, wenn du kein Oszi besitzt, dann ist es wohl am 
einfachsten, wenn du dir das beim kompilieren erstellte Listing 
(listfile) ansiehst. Dort solltest du mehr oder weniger den 
"Assembler"-Code sehen, den der GCC erzeugt. Dann noch die Maschinencode 
Taktzyklen raussuchen und manuell addieren.

Andere Methode wäre noch (weiß jedoch nicht wie genau), das Projekt im 
AVR Studio zu simulieren. Der Simulator kann dir die Zeit anzeigen, die 
seit Beginn vergangen ist (zu jedem Zeitpunkt). Wenn du vor deiner 
Schleife einen Breakpoint setzt, die Zeit notierst und danach wieder 
einen Breakpoint setzt, dann siehst du ca. die benötigte Durchlaufzeit.

Das ganze siehst du beim AVR Studio Simulator (links) mit dem Begriff 
"Stop Watch". Wichtig ist, dass du die Frequenz anpasst.

Roman
p.s. Mehr Tipps gibt's in meinem Buch: www.avrbuch.de

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.