Forum: Mikrocontroller und Digitale Elektronik ATMega2560 - ISR routine wird nicht erkannt


von S. (Gast)


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.

von holger (Gast)


Lesenswert?

Zeile 42 ist falsch.

von witzig (Gast)


Lesenswert?

Ne Zeile 42 passt.
Schau mal auf Zeile ab 40 in der main().

von S. (Gast)


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??

von Thomas E. (thomase)


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.

von AS (Gast)


Lesenswert?

Ein paar Infos wären sicherlich nützlich. Am besten den Quelcode aufs 
nöigste reduzieren und hochladen

von S. (Gast)


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...

von Georg G. (df2au)


Lesenswert?

hast du denn das andere File auch deinem Projekt hinzugefügt?
Interessant wäre mal die Ausgabe des make

(Aber bitte ein "make all")

: Bearbeitet durch User
von matrixstorm (Gast)


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

von holger (Gast)


Lesenswert?

>dann ist der Fehler da...

Exakte Fehlermeldung?

von Thomas E. (thomase)


Lesenswert?

S. schrieb:
> Ich kopiere die ISR einfach in ein anderes file und dann ist der Fehler
> da...
Wenn ich sowas mache, funktioniert das. Genauso wie bei jedem anderen 
auch.
Also zeig das File, wo du das reinkopierst und die Fehlermeldungen und 
Warnungen. Das, was du bisher veröffentlicht hast, interessiert kein 
Schwein.

mfg.

von Logiker (Gast)


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).

von S. (Gast)


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!!!

von Karl H. (kbuchegg)


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)

von S. (Gast)


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?

von Georg G. (df2au)


Lesenswert?

S. schrieb:
> Vll weiß hier jemand auch Rat

Du wurdest mehrfach gebeten, das gesamte Projekt hier einzustellen. Ohne 
konkrete Daten ist das sinnlos.

von Stefan E. (sternst)


Lesenswert?

S. schrieb:
> 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....

Ist ja auch kein Wunder, wo du doch sämtliche Warnings abschaltest.

von S. (Gast)


Lesenswert?

Stefan Ernst schrieb:
> Ist ja auch kein Wunder, wo du doch sämtliche Warnings abschaltest.

Why?   Ahso, das flag ist natürlich auch noch gesetzt:  -Wall


Wüsste nicht welche flags ich noch setzen könnte.

von Stefan E. (sternst)


Lesenswert?

S. schrieb:
> Why?

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?

von S. (Gast)


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...

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.