Laufzeiten von Routinen ermitteln

Gast #285351
Lesenswert?
• ▲
▼
Hallo,

ich habe eine recht komplexe Routine, bei der ich die zu erwartende
reine Laufzeit abschätzen möchte. Eine Hardware, auf der ich die
Routine unter Praxisbedingungen ausmessen könnte, habe ich nicht.

Ist der avr-gcc in der Lage, mir diese Information automatisch zu
liefern, z.B. eine Aussage wie "1 Durchlauf dieser Routine benötigt
xyz Clock Cycles"?

Andererseits bin ich ja darauf angewiesen, durch den generierten
Assemblercode zu gehen und mir da für jede Assembleranweisung die
benötigten ClockCycles aufzuschreiben und später aufzuaddieren - dazu
folgende Frage:

Die mit dem WinAVR makefile-Template generierten Listings enthalten ja
hauptsächlich den Assemblercode, gibt es einen Compilerswitch, um auch
die Kommentare aus den C-Sourcen in das Listing reinzupacken? Ich habe
schon in das gcc-Manual geschaut (ich schwöre ;)), allerdings hat mir
die Aussage "...-Wa,option: Pass option as an option to the assembler.
If option contains commas, it is split into multiple options at the
commas. ..." nicht weitergeholfen, da nirgendwo beschrieben steht,
welche Schalter sich hinter 'options' verbergen können.

Ich hoffe, Ihr (Du, Jörg :) ) könnt mir helfen.
Gast #285352
Lesenswert?
• ▲
▼
Simuliere dein Programm einfach im AVR Studio. Dort kannst du die
Frequenz des Prozessors einstellen und hast eine Stoppuhr. Die kannst
du vor dem Aufruf der Funktion auf 0 zurücksetzen und siehst dann,
wieviel Zeit die Funktion benötigt hat.
Gast #285358
Lesenswert?
• ▲
▼
Also, es liegt an der Compilerversion und den Debuginformationen.
Wenn der avr-gcc mittels -gstabs (statt -g) gestartet wird, erscheint
der c-Code in der .lst-Datei. Ansonsten hilft evtl. auch die .lss-Datei
weiter.

Erleuchtet.
Rick
Moderator Persönliche Seite #285359
Lesenswert?
• ▲
▼
Du kannst (mit -S statt -c) auch dem Compiler sagen, dass er
dir eine Assemblerdatei direkt erzeugt.

Wie viele Takte er für die Ausführung braucht, kann er natürlich
nicht ausrechnen, das hängt ja vom Code-Pfad ab.  Im Extremfall:
eine Endlosschleife braucht auch unendlich viele Takte. ;-)

Ansonsten: Zeiten messen.  Kann man mit einem Hardware-Timer auch
in realer Hardware machen.
Gast #285360
Lesenswert?
• ▲
▼
@ Bri: ich habe das Tool nun installiert und stehe vor zwei Problemen

- wie komme ich an besagte die Stoppuhr?
- AVRStudio sagt mir, dass ich den ATmega32 nicht mit 16MHz sondern nur
mit max. 12MHz betreiben darf -- lt. Datenblatt sind 16MHz allerdings ok

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.