Forum: Mikrocontroller und Digitale Elektronik Interrupt Latenz fortlaufen messen(schätzen) mit Timer?


von offline (Gast)


Lesenswert?

Moin,
wenn ein Timer(upcounter) mit dem CPU-Takt läuft, und bei einem Overflow 
einen Interrupt auslöst, ist dann der Wert im 'count' Register(das sich 
dauernd ändert) die Interrupt Latenz in Taktzyklen?

von Sebastian S. (amateur)


Lesenswert?

Wenn Du soviel in eine Interruptroutine "gepackt" hast, dass ihr 
verhalten einer Kontrolle bedarf, ist nicht im Rechner was schief 
gelaufen, sondern an der Tastatur.
Da die meisten Messsequenzen (Timer) ihrerseits Unterbrechungen 
verwenden, ist das Ergebnis sowieso mittelprächtig.

von Thomas E. (thomase)


Lesenswert?

offline schrieb:
> ist dann der Wert im 'count' Register(das sich
> dauernd ändert) die Interrupt Latenz in Taktzyklen?

Ja.

von Jacko (Gast)


Lesenswert?

Die Interrupt-Latenz ist als Zeit vom Auftreten des Interrupts
bis zum Beginn der Bearbeitung definiert.

Ganz grob ist der Zählerstand die Latenzzeit.
Falls du vorher noch Register sicherst, kannst du die Takte
dafür abziehen.

Es ist aber nicht unbedingt die maximale Latenzzeit:
Bei einigen µCs kann die Zeit davon abhängen, ob gerade ein
1-Takt-Befehl, oder ein Mehr-Takt-Befehl bearbeitet wurde.

Weiterhin können bei ungünstigstem Zusammentreffen alle
anderen Interrupts noch ihre aufsummierten maximalen
Bearbeitungsdauern als Verzögerung dazubringen!

Oder Befehlssequenzen, die mit unterdrückten Interrupts
ausgeführt werden müssen.

Beim defensiven Programmieren summiert man alle diese
Zeiten und fragt sich, ob dann die Signalbearbeitung noch
100% sicher ist.

Definier doch eine globale Variable MAX_LAT (Anfangswert = 0)
und speichere dort jeden Zählerstand, der größer, als der
bisherige Wert ist.

Im Hauptprogramm kannst du eine Sequenz für die Überwachung von
MAX_LAT einbauen.

Eventuell muss es aber ein 16-Bit-Wert sein (mehr als 255
Latenz-Takte) - und vielleicht tritt der Worst-Case-Wert auch
erst nach 7 Monaten auf.

von c-hater (Gast)


Lesenswert?

offline schrieb:

> wenn ein Timer(upcounter) mit dem CPU-Takt läuft, und bei einem Overflow
> einen Interrupt auslöst, ist dann der Wert im 'count' Register(das sich
> dauernd ändert) die Interrupt Latenz in Taktzyklen?

Ja, allerdings nur für den Einzelfall. Sprich: der Wert kann u.U. ganz 
erheblich schwanken. Wenn du allerdings sehr viele Messungen mit diesem 
Ansatz machst, dann entpricht der gemessene Minimalwert manchmal 
näherungsweise der statischen bzw. systematischen Interruptlatenz, die 
Differenz aus Maximalwert der Messungen und Minimalwert der Messungen 
entspricht manchmal näherungweise der variablen Interruptlatenz.

Wenn du diese Werte nicht anders als mit Messen ermitteln kannst, hast 
du eigentlich schon verloren, jedenfalls wenn du ein Realtime-System 
bereitstellen oder betreiben willst. Dafür muß man nämlich für beide 
Eigenschaften den worst case vorab als Konstante beziffern können...

Das muss naturgemäß in jeder anderen Sprache als Assembler scheitern und 
selbst in Assembler ist es nur auf einfachen Zielarchitekturen einfach 
zu ermitteln...

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.