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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren