ISR in eigener Code Datei.

OP #747246
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
#747263
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
Gast #747278
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
#747288
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...
Gast #747289
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren