Forum: Mikrocontroller und Digitale Elektronik Ausführungszeit/Anzahl Takte einer Funktion/eines Programme


von Philipp (Gast)


Lesenswert?

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

von Hans-Christian (Gast)


Lesenswert?

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

von Philipp (Gast)


Lesenswert?

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

von T. Stütz (Gast)


Lesenswert?

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

von Philipp (Gast)


Lesenswert?

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.

von Tobias S. (tobias)


Lesenswert?

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

von Philipp (Gast)


Lesenswert?

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

von Fritz G. (fritzg)


Lesenswert?

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.

von Philipp (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.