Kurze Frage: Ich habe auf einem PIC mehrere Prozesse laufen, die alle über Interrupts abgearbeitet werden. Einer davon darf aber auf keinen fall verzögert werden, d.h. muss ohne unterbrechung laufen. Kann ich ihm die "höchste priorität" geben oder die anderen Interrupts ausschalten? (Sind andere Interrupts genrerll nicht zugelassen, wenn man schon in einem Interrupt ist?) Eddy
Hallo, bei den PIC gibt es meist nur eine Prioritätsstufe. Bei den größeren PIC18xxx gibt es zwei Stufen. Hier kannst Du dann die Interrupts eine der beiden Stufen zuweisen. Fall a: Nur eine Stufe vorhanden. Wenn die Aufgabe wirklich dringend ist, dann musst Du wohl alle anderen Aufgaben per Polling im Main abfragen. Die wirklich wichtige Aufgabe dann per Interrupt. Nur dann hast Du eine garantierte Reaktionszeit. Fall b: Zwei Stufen vorhanden. Die unwichtigen Aufgaben auf die niedrige Stufe, die wichtige Aufgabe auf die höhere Stufe. Ein Interrupt kann die Abarbeitung einer Interruptbehandlung nicht unterbrechen. Es sei denn, es liegt eine höhere Priorität vor. Gruß, Rainer
Hi Rainer, danke für die Antwort. Noch eine Frage: Benutzt der PIC 2 verschiedene Interrupt-Vektoren für High- und Low-Priority Interrupts? Scheint mir irgendwie so. Ich benutze den PCWH compiler und dort gibt es das keyword FAST für high priority interrupts. Allerdings muss man dann selber seine register sichern und wiederherstellen. Hat jemand vielleicht assembler code, der genau das macht? (alle register sichern und wiederherstellen) Danke Eddy
Ja, der PIC hat 2 Vektoren für die Interrupts. Der High-Vektor ist 0x08 und der Low-Vektor ist 0x18(also bei den PIC18F ist es so).
Hallo Eddy, da gibt es doch was von Ratiopharm ... Spaß bei Seite, bietet der Compiler keine eigenen Befehle an, mit denen die Register gesichert werden können? Der cc5x hat so etwas, zum Beispiel. Gruß, Rainer
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.