Forum: Compiler & IDEs Interrupt auslagern


von pete (Gast)


Lesenswert?

Hallo zusammen,

ich reorganisier gerade meine Programmierungen, heißt im Klartext, dass 
ich verschiedene c-Files verwenden möchte für UART,TIMER etc. um diese 
später wesentlich einfacher einbinden zu können.

Jetzt wollte ich wissen, wie ich das mit Interruptroutinen machen muss. 
Geht das überhaupt und wie mache ich das am besten.

Mit allen anderen Funktionen hat es bisher einwandfrei funktioniert...

von Timmo H. (masterfx)


Lesenswert?

Einfach in dem entsprechenden C-File die <avr/interrupt.h> includen und 
die ISR in das C-File schreiben (sofern du mit AVRs arbeitest, hast du 
ja leider nicht geschrieben)

von pete (Gast)


Lesenswert?

okay und wie mache ich das dann mit den variablen, die im Hauptprogramm 
verwendet werden?

Wie macht ihr das? Lagert ihr so viel wie möglich in eigene .c-Files 
oder lasst ihr die Interruptroutinen immer im Hauptprogramm?

von Karl H. (kbuchegg)


Lesenswert?

pete schrieb:
> okay und wie mache ich das dann mit den variablen, die im Hauptprogramm
> verwendet werden?

Ins C-File kommt die Defintion der Kommunikationsvariable
Ins Header File eine entsprechende extern-Deklaration.

http://www.mikrocontroller.net/articles/FAQ#Globale_Variablen_.C3.BCber_mehrere_Dateien

von Klaus Falser (Gast)


Lesenswert?

pete schrieb:
> Wie macht ihr das? Lagert ihr so viel wie möglich in eigene .c-Files
> oder lasst ihr die Interruptroutinen immer im Hauptprogramm?

Die Interrupt-Routine gehört natürlich in das C-File, das die Komponente 
treibt, z.B. uart.c.
ISR und die damit kommunizierenden Routinen verwenden ja gemeinsame 
Variablen, die nach außen eigentlich nicht sichtbar sein müssen (oder 
sollen) und zu den Implemetierungsdetail gehören.

Wenn die ISRs alle ins Hauptprogramm kämen, würde dies die Kapselung der 
Implementierung verhindern.

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.