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?
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.
offline schrieb: > ist dann der Wert im 'count' Register(das sich > dauernd ändert) die Interrupt Latenz in Taktzyklen? Ja.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.