Hallo, gibt es die Möglchkeit (ausser im Disassembler die Befehle zu zählen) die Anzahl der Takte die für eine Funktin benötigt werden zu bestimmen? Evt ein schickes Programm das die Anzahl benötigter Takte angiebt? Konnte irgendwie nix finden (bzw hab nur nach dem falschem gesucht). Bin gerade am überlegen ob ich eine etwas umfangreichere Auswertung von Daten die über die serielle Schnittstelle reinkommen direckt in der ISR mache um Speicherplatz zu sparen. Dazu würd ich gerne wissen welcher Zeitaufwand dahinter steckt, da ja die Daten mit fester geschwindigkeit reinkommen und die ISR fertig sein muss bevor das nächste Byte da ist. Vielen Dank schon mal Philipp
Hallo Philipp, ich weiß ja nicht, ob Du C oder Assembler programmierst. Ich habe mit Erfolg im Simulator des AVR-Studios den Zykluszähler bei verschiedenen Breakpoints genommen und mir die Ausführungszeiten des dazwischen ausgeführten Codes berechnet. Geht prima. Allerdings geht das nicht so recht, wenn Du externe Daten auswertest. Gruss Hans-Christian
Hallo Hans-Christian, ja, hatte ich vergessen zu sagen. Programiere in C, könnte das ganze natürlich auch ins AVR Studio exportieren und da laufen lassen aber am liebsten währe mir ein Programm das einfach nur die ASM Befehle zählt (evt noch weiß welche 2 Zyklen brauchen) und mir dann einfach nur die Anzahl ASM Befehel/Takte ausgiebt. Werd Deine Idee aber gleich mal testen. Achso, ja, verwende derzeit den IAR Compiler, werde aber bald auf WinAVR umsteigen. Gruss Philipp
Wenn du noch einen Ausgabe-Port-Pin frei hast, beim Eintritt in Funktion auf High beim Austritt auf Low und dann mit dem Oszi messen. Gruss
Hmm, das mit dem Oszi ist auch eine gute Idee. Hab nur leider keins, und so "genau" brauch ichs auch nicht. Mir wird einfach ein Prog reichen das die ASM Befehle zählt. Aber trotzdem ne tolle Sache, werd ich im Hinterkopf behalten, Danke.
Hi, du musst bedenken, dass je nach Eingabewerten eine Funktion mal laenger und mal kuerzer dauern kann und es mit einer plumpen Zaehlung der Befehle nciht einfach getaeen ist, wenn Spreunge oder Schleifen vorhanden sind. Da hilf nur geschicktes Siumulieren oder messen an der realen Hardware. Gruss Tobias
Hi Tobias, ja ich weiß, es geht im Endeffeckt auch nur darum in welcher Größenordnung sich die Funktion ungefähr befindet. Halt eine worst case Betrachtung. Mir geht es darum, ob ich eingehende Daten über die serielle Schnittstelle auswerten/verarbeiten kann bevor die Übertragung für das nächste Byte komplett ist oder ob ich einen Buffer brauche. Aber Danke für den Hinweis, hätte ich anfangs etwas genauer beschreiben müssen. Philipp
Beim avr-gcc gäbe es ein lst-File mit dem Assemblercode. Am Ende jeder Funktion steht die Codegrösse, dann hast mal einen Anhaltspunkt. Vielleicht gibts sowas beim IAR auch.
Hallo noch mal, vielen Dank für Eure hilfe. Habs inzwischen so gelöst das ich mir im Simulator den Programmspeicher mit den ASM Befehlen angeschaut habe. Und dann musst ich ja nur noch Endspeicheradresse-Anfangspeicheradresse=Anzahl Befehel in HEX rechnen und war Glücklich. Danke noch mal Philipp
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.