Forum: Mikrocontroller und Digitale Elektronik PIC - Interrupt Vektoren und Speicher - Low / High Priority


von Sven W. (schwaenn)


Lesenswert?

Hallo Forum,

ich habe eine Frage zur Startadresse der Interrupt Routinen. Laut 
Datenblatt des PIC18F4550 zeigt der High-Priority Interupt Vector auf 
0x08, der Low-Priority Interupt Vector auf 0x18. Laut Linkerfile reicht 
der Interupt Speicher von 0x00 bis 0x29. Alles in allem sind da nur ein 
paar Byte Speicher.

In meinem Programm habe ich nur einen Interrupt, der allerdings recht 
groß ist. Ich habe deswegen im Linkerfile den Speicher für Interupts 
vergößert. Dabei kamen mir folgende Fragen auf:

Wird der Speicher für den Low-Priority Interupt dabei nicht vom Code des 
High-Level Interupts überschrieben? Was passiert, wenn nun ein Low-Level 
Interupt ausgelöst wird? Der müsste dann doch mitten im High-Level 
Interupt beginnen?
Wenn ich den Speicher für Interupts vergößere, verschiebe ich dann auch 
gleich den Low-Priority Interupt Vector oder muss ich das noch irgendwo 
selbst machen?
Eigentlich müsste man dann doch immer nur Funktionsaufrufe in den 
Interupt reinschreiben, die dann irgendwo anders hinspringen. So wenig 
Platz reicht ja niemals. In Assembler Programmierung ist das ja üblich, 
in C hab ich das noch nicht gesehen.

Vielen Dank für die Hilfe.

von Severino R. (severino)


Lesenswert?

An der Adresse 0x08 resp. 0x18 schreibst Du einen goto mit Deiner 
Interrupt-Routine als Sprungziel.
Schau Dir mal die Beispiele an, die mit dem Compiler (mit welchem 
arbeitest Du denn?) geliefert werden.

von Sven W. (schwaenn)


Lesenswert?

So hab ichs gemacht. Im "MPLAB C18 C Compiler User's Guide" hab ich ein 
nettes Beispiel gefunden. Danke für den Tipp.

von Severino R. (severino)


Lesenswert?

Bitte, und danke für die Rückmeldung.

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.