ATMega2560 - ISR routine wird nicht erkannt

Gast #3479816
Lesenswert?

Hallo,

ich habe ein seltsames Problem.
In mein Atmel Studio 6 Projekt habe ich ein neues file.c generiert und
dort meine Timer interrupt routine ISR(...   eingefügt.
Interessanterweise findet der compiler diese routine nicht, obwohl 
andere
Funktionen in genau dem gleichen File aufgerufen werden können.
Die ISR an sich ist auch richtig geschrieben, da wenn ich die ganze
Routine in ein anderes file kopiere, funktioniert alles einwandfrei.

Wie kann das sein? Habt ihr eine Idee?


Viele Grüße
S.
Gast #3479854
Lesenswert?

Sehr lustig.


Hier der Code:
1
ISR (TIMER0_COMPA_vect)
2
{  
3
     DDRA |= (1 << PINA7);
4
    PORTA |= (1 << PINA7);
5

6
}


Kann man damit was anfangen? Nein, weil der Code an sich funktioniert, 
wie ich schon sagte. Er funktioniert nur nicht, wenn ich ihn in meine 
file.c
einfüge...  Soll ich vll das ganze Projekt hochladen oder wie soll das 
gehen??
#3479868
Lesenswert?

S. schrieb:
> Sehr lustig.
Der Post von Holger ist lustig. Der von witzig dagegen überhaupt nicht.

> Hier der Code:
>
>
1
> ISR (TIMER0_COMPA_vect)
2
> {
3
>      DDRA |= (1 << PINA7);
4
>     PORTA |= (1 << PINA7);
5
> 
6
> }
7
>
>
>
> Kann man damit was anfangen? Nein, weil der Code an sich funktioniert,
> wie ich schon sagte. Er funktioniert nur nicht, wenn ich ihn in meine
> file.c
> einfüge...  Soll ich vll das ganze Projekt hochladen oder wie soll das
> gehen??
Ja, wie denn sonst. Daß die 3 Zeilen da oben funktionieren, sieht jeder 
Idiot. Aber das schriebst du ja schon.

mfg.
Gast #3479890
Lesenswert?

-.-


So funktioniert alles gut:
1
func.c :
2
ISR (TIMER0_COMPA_vect)
3
{
4
      DDRA |= (1 << PINA7);
5
     PORTA |= (1 << PINA7);
6
 
7
}
8

9
main.c :
10
int main(void)
11
{ 
12
  Timer0_init();
13
  sei();
14
}


So funktioniert nichts mehr:
1
file.c :
2
ISR (TIMER0_COMPA_vect)
3
{
4
     DDRA |= (1 << PINA7);
5
     PORTA |= (1 << PINA7);
6
 
7
}
8

9
main.c :
10
int main(void)
11
{ 
12
  Timer0_init();
13
  sei();
14
}


Ich kopiere die ISR einfach in ein anderes file und dann ist der Fehler 
da...
Gast #3479905
Lesenswert?

Wird die andere File (in die du die ISR verschiebst) ggf. nicht zum 
Projekt  gelinkt?

ISR sind weak symbols - wenn die am Ende fehlen gibt es keinen Fehler...
...und so wird Fehlerverhalten erst waehrend der Ausfuehrung bemerkbar.

MfG
Gast #3479910
Lesenswert?

Kann es sein, das Du file.c (noch) nicht als Projektfile hinzugefügt 
hast?
Falls, nein, gibt es mehrere Dateien namens "file.c" auf Deinem Rechner? 
Kann es sein, das Du die ISR in einer anderen Datei namens "file.c" 
hinzugefügt hast, als jene die Du als projektfile hinzugefügt hast?

Falls das alles nicht relevant ist, dann poste mal das ganze Projekt als 
ZIP-File. Vielleicht mag das mal jemand hier anschauen. (Ich habe kein 
AVRStudio 6).
Gast #3479915
Lesenswert?

Ich habe den Fehler gefunden.  umfall

In das func.c wird über 3 Ecken die Bibliothek
#include <avr/interrupt.h>
eingebunden...  und in mein file.c nicht.


Natürlich. Jetzt ist alles klar. Sorry für meinen Aufruhr, hatte 
eigentlich
vorher schon alle Biblothekten abgeglichen, aber diese ist mir zwischen
den Händen weggeglitten...


Danke trotzdem für eure Hilfe!!!
#3479976
Lesenswert?

S. schrieb:
> Ich habe den Fehler gefunden.  *umfall*
>
> In das func.c wird über 3 Ecken die Bibliothek
> #include <avr/interrupt.h>
> eingebunden...  und in mein file.c nicht.

Interessant.
Und da gabs keine Warnung, dass die Funktion
1
ISR (TIMER0_COMPA_vect)
2
{
3
      DDRA |= (1 << PINA7);
4
     PORTA |= (1 << PINA7);
5
 
6
}

namens "ISR" keinen Return-Datentyp hat und der Compiler mit 
TIMER0_COMPA_vect nichts anfangen kann?

Wenn da wirklich nichts gekommen ist, dann kontrollier deine 
Warning-Levels!
(Aber eigentlich, wenn ichs mir recht überlege, hätte das sogar ein 
Error sein müssen)
Gast #3480975
Lesenswert?

Karl Heinz schrieb:
> Wenn da wirklich nichts gekommen ist, dann kontrollier deine
> Warning-Levels!
> (Aber eigentlich, wenn ichs mir recht überlege, hätte das sogar ein
> Error sein müssen)

Mein warning level ist: -pedantic -w

Ich kann mich auf den Kopf stellen, aber ich bekomm weder errors noch 
warnings, egal was ich mach: Build, Rebuild, clean solution+rebuild....


Vll weiß hier jemand auch Rat, wie bei solchen Fällen zu mindest ein 
warning
ausgegeben wird?
Gast #3481293
Lesenswert?

Stefan Ernst schrieb:
> Ernsthaft? Du hast zwei Optionen gepostet, und ich habe das damit
> kommentiert, dass du die Warnungen abschaltest. Ist es jetzt echt so
> schwer, diese Optionen einfach mal in der Doku nachzuschlagen?

Ich habe deinen Post interpretiert, dass ich ein flag vergessen hab zu 
aktivieren. Dann hab ich nachgeschaut und kein weiteres flag finden 
könne.
Deshalb war meine Frage wohl ernsthaft...

Mittlerweile habe ich verstanden, dass ich das Wort "inherit" aus dem 
englischen falsch übersetzt habe und -w deaktiviert.


Egal...

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