Forum: Mikrocontroller und Digitale Elektronik ISR in eigener Code Datei.


von Dirk R. (freak)


Lesenswert?

Hallo,

kann ich eine ISR in eine eigene Datei legen...
main.c (hier läuft das Haupt programm)
fetcher.c (von hier werden in regelmäßigen Abständen, Daten von extern 
geholt)

in fetcher.c wird der entsprechende timer initialisiert.
Die ISR (TIMER1_COMPA_vect) wird aber nur aufgerufen, wenn sie in der 
main.c ist, kopiere ich sie in die fetcher.c, wird sie nicht 
ausgeführt...

ich möchte sie aber nicht wirklich in der main.c, da sie dort vom Inhalt 
nich reingehört...

Muss ich irgendwas einstellen, etc? Oder geht das vielleicht garnich?

Danke
Dirk

von Oliver (Gast)


Lesenswert?

Eigentlich sollte das probemlos funktionieren.

#include <avr/interrupt.h>

in fetcher.c nicht vergessen?

Oliver

von Johannes M. (johnny-m)


Lesenswert?

Wenn der Compiler nichts von der fetcher.c weiß, dann geht das natürlich 
nicht. Dann geht allerdings auch alles andere, was in fetcher.c steht, 
nicht. Ansonsten steht der Deklaration einer ISR in einem separaten 
Modul eigentlich nichts im Wege.

von Falk B. (falk)


Lesenswert?

@ Dirk Reske (freak)

>kann ich eine ISR in eine eigene Datei legen...

Ja.

>in fetcher.c wird der entsprechende timer initialisiert.
>Die ISR (TIMER1_COMPA_vect) wird aber nur aufgerufen, wenn sie in der
>main.c ist, kopiere ich sie in die fetcher.c, wird sie nicht
>ausgeführt...

Du musst sie logischerweise über ein include einfügen.
1
#include "fetcher.c"

MFG
Falk

von Johannes M. (johnny-m)


Lesenswert?

@Oliver:
Klar, das muss natürlich auch rein. Allerdings müsste es ohne das 
#include Warnmeldungen geben...

von Falk B. (falk)


Lesenswert?

@ Johannes M. (johnny-m)

>Klar, das muss natürlich auch rein. Allerdings müsste es ohne das
>#include Warnmeldungen geben...

Warum? Die ISR wird nirgends im Code aufgerufen. Die wird nur compiliert 
und nie daszugelinkt :-0

MFG
Falk

von Oliver (Gast)


Lesenswert?

???

.c-Dateien werden NIEEEMALS includiert. Natürlich muss fetcher.c im 
makefile angegeben werden, aber dann sollte es auch funktionieren.

Und #include <avr/interrupt.h> darf nicht fehlen, sonst gehts nicht.

Oliver

von Falk B. (falk)


Lesenswert?

@ Oliver (Gast)


>.c-Dateien werden NIEEEMALS includiert. Natürlich muss fetcher.c im

OK, hast ja Recht ;-)

>makefile angegeben werden, aber dann sollte es auch funktionieren.

Bzw. im AVR-Studio im Projektbaum mit drin sein.

MFG
Falk

von Johannes M. (johnny-m)


Lesenswert?

Falk Brunner wrote:
> Warum? Die ISR wird nirgends im Code aufgerufen. Die wird nur compiliert
> und nie daszugelinkt :-0
Doch. Der Compiler meckert dann wegen "Implicit declaration of ISR" oder 
so ähnlich. Kannst es ja mal ausprobieren.

Und .c-Dateien mit #include einzubauen ist auch nicht grad bester 
Stil...

von Oliver (Gast)


Lesenswert?

Stimmt, der Compiler wirft ohne das include mehrere Warnungen,

>proc.c:6: warning: return type defaults to 'int'
>proc.c:6: warning: function declaration isn't a prototype
>proc.c: In function 'ISR':
>proc.c:6: warning: type of '__vector_21' defaults to 'int'
>proc.c:8: warning: control reaches end of non-void function

aber er läuft durch.

Oliver

von Dirk R. (freak)


Lesenswert?

Danke....

alles was gefehlt hat, war die interrupt.h zu includen....

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.