Forum: Mikrocontroller und Digitale Elektronik Laufzeit der C-Funktionen bestimmen/berechnen


von Praktikant (Gast)


Lesenswert?

Hallo zusammen,

ich bin neu auf dem Gebiet Mikrocontrollerprogrammierung.
Ich suche nach allen möglichen Methoden um Laufzeit von C-Funktionen zu 
bestimmen/berechnen.

Die einzige Methode, die ich kenne ist:

- Status der Debug-Pins (digital-I/O) in SW (Funktionsanfang toggeln und 
Funktionsende nochmals toggeln) zu setzen und per Oszi die Zeit 
bestimmen.

Gibt es andere Methoden zur Bestimmung/Berechnung der Laufzeit?
Ich bin Euch für jede Info zu diesem Thema dankbar.

Grüße

von Uwe .. (uwegw)


Lesenswert?

- in einem Simulator laufen lassen

- erzeugten Assemblercode analysieren und die Dauer aller benutzten 
Instruktionen zusammenzählen

von Chris (Gast)


Lesenswert?

Eine Möglichkeit wäre, den vom Compiler erzeugeten Assembler-Code zu 
analysieren und daraus die Laufzeit bestimmen. In den Datenblätter von 
den Controllern sind meisten die Anzahl der Takte für die einzelnen 
Assemblerbefehle angegeben.
Allerdings übersetzt jeder Compiler den C-Code in ein etwas anderen 
Assembler-Code, kommt auch drauf an auf was Optimiert wird.
Aber für ein bestimmten Fall kann man das so bestimmen.


Grüße
Chris

von egberto (Gast)


Lesenswert?

Schau dir den entstandenen Assemblercode (map-file) an, schlag nach wie 
viele Takte welcher Befehl braucht und rechne das zusammen.
Falls noch Interrups auftreten, musst du die nat. auch mit einrechnen.

Viele Grüße,

egberto

von Micha S. (e-tec)


Lesenswert?

Oder viel einfacher: DER TIMER deines Prozessors!
Bei Funktionsaufruf den Timer wert sichern, am ende ebenso und die 
differenz entspricht deiner zeit (in tics), dann noch die 
timerauslesezyklen abziehen nicht vergessen, das speichern in einer 
variable (sind alles ein paar zyklen...) und dann das ganze in ms oder µ 
umrechnen!

grüße & viel erfolg

von Andreas B. (andreas_b77)


Lesenswert?

Wenn man es über Zeitmessung am lebenden Objekt machen will, bietet es 
sich noch an, die Zeit über z.B. 1000 Durchläufe zu messen. Denn bei 
längeren Zeiten hat man meist eine höhere Zeitauflösung zur Verfügung.

von Micha S. (e-tec)


Lesenswert?

Ja das sehe ich auch so, viele Wege führen nach Rom ;-)
Möglichkeiten gibt es mehr als genügend, es kommt ganz auf die Umgebung 
oder die Wünsche an. Wobei ich die Möglichkeit mit dem Oszi auch schon 
mal ausprobiert hab um ebensolche Berechnungen zu überprüfen.

von Praktikant (Gast)


Lesenswert?

...wow, ihr habt einige Möglichkeiten aufgelistet!


Vielen Dank!

von steve (Gast)


Lesenswert?

Falls dein Debugger einen Trace mitbringt, kannst du auch diesen 
bemühen.

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.