www.mikrocontroller.net

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


Autor: Dirk R. (freak)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich sollte das probemlos funktionieren.

#include <avr/interrupt.h>

in fetcher.c nicht vergessen?

Oliver

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.
#include "fetcher.c"

MFG
Falk

Autor: Johannes M. (johnny-m)
Datum:

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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dirk R. (freak)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke....

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.