Forum: Compiler & IDEs Laufzeiten von Routinen ermitteln


von Gast (Gast)


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.

von Bri (Gast)


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.

von Gast (Gast)


Lesenswert?

Gute Idee,

allerdings habe ich das AVR Sudio weder installiert, noch verfügbar -
ausserdem würde ich wahrscheinlich einen halben Tag brauchen, bis ich
es soweit bedienen kann ;)

von Bri (Gast)


Lesenswert?

Lad es dir einfach von hier runter (ist kostenlos):

http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725

von Rick Dangerus (Gast)


Lesenswert?

@Gast:
avr-gcc erzeugt (u.a.) eine .lst-Datei. Dort findest Du Quelltext, asm
und hex beieinander.

Rick

von Gast (Gast)


Lesenswert?

@Rick: in der .lst-Datei ist bei mir nur der asm enthalten -- kein
Quelltext und keine Kommentare aus dem Quelltext

von Rick Dangerus (Gast)


Lesenswert?

Hmm. Unter winavr gehts nicht (grad probiert) und unter Linux (avr-gcc)
hab ich es erst gestern gesehen. Und dass, bei im Prinzip gleichem
makefile.

Ratlos.
Rick

von Rick Dangerus (Gast)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Gast (Gast)


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

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.