Die minimale und maximale Durchlaufzeit einer Funktion

Gast #1947253
Lesenswert?

Hallo, liebe Elektroniker!


Ich schreibe gerade an einer Funktion, die in einer oder mehreren 
IRQ-Routinen aufgerufen werden soll. Da das ganze zeitkritisch ist, 
würde ich gerne im Vorhinein wissen, wie viel Zeit die Funktion maximal 
benötigt. Es kommen auch ein paar IF-Verzweigungen vor, die die Laufzeit 
entsprechend beeinflussen können.

Ich verwende Codevision und programmiere einen ATXMEGA128A1.
Gibt es im AVR-Studio die Möglichkeit, die maximale und minimale 
Durchlaufzeit einer Funktion berechnen zu lassen?


Vielen Dank im Voraus.


LG

Maxi
Gast #1947282
Lesenswert?

Würde es gehen, wenn man zu Beginn der Funktion einen Timer startet, der 
eine Variable inkrementiert und am Ende der Funktion den Timer stoppt 
und die Variable ausliest. Wird diese z.B. alle 100µS inkrementiert 
hätte man doch teheoretisch eine Annäherung. Oder würde das selber zu 
viel Zeit kosten?
Ist jetzt eine Idee, würde gerne zur Diskussion stellen wie brauchbar 
sie ist...
#1947295
Lesenswert?

Da ist doch ein Timer das Passende: Zu Beginn der Funktion den Timer 
starten oder auf Null setzen und am Ende der Funktion den erreichten 
Timerstand lesen. Es gibt ja sogar 16-Bit-Timer. (Also nix Timer-Int)

Dann eben die Parameter der Funktion solange variieren bis die größte 
Lauflänge festgestellt ist. Bei etwas Kenntnis der Vorgänge in der 
Funktion oder deren Algorithmus ließe sich das schon machen. Dabei fühlt 
man sich aber nur wohl, wenn das ganze in Assembler geschrieben ist. 
Wenn da erst einmal irgendwelche Bibliotheken oder gar Compiler 
mitmischen wirds Lotteriespiel.
Gast #1947296
Lesenswert?

>Ich schreibe gerade an einer Funktion, die in einer oder mehreren
>IRQ-Routinen aufgerufen werden soll.

Au weia falls nested Interrupts erlaubt sind.

Die einfachste Debug Methode der Welt:
Am Anfang der Routine einen IO Pin setzen.
Am Ende der Routine den IO Pin löschen.
Osci dran und Zeit messen. Dann hast du ungefähr
die Zeit die deine Routine braucht.

>Es kommen auch ein paar IF-Verzweigungen vor, die die Laufzeit
>entsprechend beeinflussen können.

Viel Spass dabei alle Möglichkeiten durchzuprobieren;)
#1947313
Lesenswert?

Steppe deine Funktion mit allen möglichen Parameterkombinationen (hehe, 
viel Spaß, das können bei manchen Funktionen schon mal gern über 10000 
sein) im Simulator durch! dann kannste am Cycle-Counter die genaue 
Anzahl der Prozessortakte/Instruktionen ablesen und mit Hilfe der 
Taktfrequenz in die entsprechende Zeit umrechnen.
Oder muss es unbedingt an der zielhardware sein, weil unter umständen 
noch auf was anderes gewartet werden muss (Was schlecht ist, da eine IRQ 
möglichst kurz sein soll. Einfach nur Variablen setzen und den Rest dann 
in der Mainloop!)
Gast #1947988
Lesenswert?

> Durchlaufzeit einer Funktion berechnen zu lassen?

Allgemein ist das natürlich nicht möglich,
Gundkurs Informatik Halteproblem.

Aber wenn du nur if's hast, also keine Schleifen,
solltest du ein Assembler-Listing ausgeben lassen,
neben den Instruktionen die Maschinenzyklen hinschreiben,
und min/max der verschiedenen Wege bilden.

Je nach Compilereinstellungen kommt was vercshiedenes
raus.

Das geht bei so einfachen Prozessoren ohne cache und
anderen Schweinerein noch recht gut, aber nicht
automatisiert.


Ein Messen von Beispielen kann natürlich immer mal
unvollständig sein, auserdem muss man den code erst
in seiner Umgebung ablaufen lassen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren