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.
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.
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 ;)
Lad es dir einfach von hier runter (ist kostenlos): http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725
@Gast: avr-gcc erzeugt (u.a.) eine .lst-Datei. Dort findest Du Quelltext, asm und hex beieinander. Rick
@Rick: in der .lst-Datei ist bei mir nur der asm enthalten -- kein Quelltext und keine Kommentare aus dem Quelltext
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
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
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.
@ 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.