mikrocontroller.net

Forum: Compiler & IDEs Dauer eines For-Schleifen Durchlaufs


Autor: WorkMännchen (Gast)
Datum:

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

Autor: Stefan Ernst (sternst)
Datum:

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

Autor: Martin L. (melvin_the_moose)
Datum:

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

Autor: Roman Mittermayr (Gast)
Datum:

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

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.