Im Datenblatt des PIC18F4525 finde ich die Aussage „Low-priority interrupts are not processed while high-priority interrupts are in progress.” Streng genommen, sagt der Satz, dass ein Low-Priority Interrupt ins Leere geht, wenn gerade ein High-Priority Interrupt abgearbeitet wird. Wenn der LP-Interrupt ein Sekunden-Timer ist, dann kann es also passieren, dass eine Sekunde ausfällt. Ist das korrekt? Oder, - wird der HP-Interrupt abgearbeitet und unmittelbar anschließend der LP-Interrupt nachgeholt? Grüße, attersee
Atter See schrieb: > Oder, - wird der HP-Interrupt abgearbeitet und unmittelbar anschließend > der LP-Interrupt nachgeholt? Exakt.
A.K., herzlichen Dank. Schneller und präziser kann man nicht antworten. Mit diesem kleinen Zeitfehler kann ich leben. Grüße, attersee
Du solltest nur beachten, dass die Abarbeitung des HP-Interupts nicht länger als die Zeitspanne des LP-Interupts dauert. Andernfalls verlierst du die entprechenden Events da das jeweilige IF nur auf den Interupt hinweist, nicht jedoch auf die Anzahl. Ausnahme ist der UART, der Buffer ist 2 Byte tief, kann also quasi 2 Interupts speichern und das IF wird erst zurückgesetzt wenn der UART-Buffer komplett leer ist.
Danke Jens für den Hinweis. Es ist gut, das zu wissen. Im aktuellen Fall entsteht dieser Konflikt also nicht, denn der HP-Interrupt ist mit ca. 50 ms viel kürzer als der LP-Sekundentakt. Grüße, attersee
Eine Interrupt-Dauer von 50 msec ??? Da ist doch was faul? Oder was macht die ISR so wichiges, solanges ?????
Hallo spontan. Das ist ok. Systemspezifische 'Terminals' lesen über einen allseitig optogekoppelten Bus einen längeren von einer 'Zentrale' gesendeten Daten-Burst. Private Anwendung. Selbst gemachtes Protokoll. Lange Leitungen. Mir geht es um robuste Kommunikation. Nochmals danke. Grüße, attersee
Es gibt zwei Sachen, processed and signalized. Ein Interrupt wird signalized wenn das entsprechende Flag ausgelöst wird. Dies ist in HW und unabhängig von der CPU. Dann gibt es processed, also daß ein Interrupt angesprungen wird. Wenn das Flag ausgelöst wird, während ein low priority interrupt in Gange ist, und dann wird dieser von einem High priority Interrupt unterbrochen, wenn dieser beendet wird dann der low priority interrupt weitergearbeitet wird, beendet wird, und erst dann könnte der inzwischen eingetroffene low priority Interrupt abgearbeitet werden. Da kann unter Umständen ein Interrupt verloren gehen, oder das Timing ausser spec sein.
Kurzer Abschlussbericht. Die SW läuft nun mehr als 48 Stunden im Dauerbetrieb und es kam zu keinem Übertragungsfehler. Eine Verzögerung beim LP Sekundentakt konnte ich nicht feststellen. Die Impuls-Zählung liegt weit innerhalb der Quarztoleranz. Ist auch kein Wunder, bei einer Wahrscheinlichkeit von etwa 0,7 Kollisionen pro 24 h, des (ach so langen) HP Interrupts mit dem LP Zeitgeber. Also, alles bestens. Danke für alle Beiträge, attersee
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.