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.
Ne Zeile 42 passt. Schau mal auf Zeile ab 40 in der main().
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??
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.
Ein paar Infos wären sicherlich nützlich. Am besten den Quelcode aufs nöigste reduzieren und hochladen
-.- 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...
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
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
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.
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).
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!!!
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)
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?
S. schrieb: > Vll weiß hier jemand auch Rat Du wurdest mehrfach gebeten, das gesamte Projekt hier einzustellen. Ohne konkrete Daten ist das sinnlos.
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.
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.