Hallo, ziehe grade mit einem Programm von Attiny nach Atmega 168P um (der Speicher war doch etwas zu kein geworden ;-)). Auf dem Attiny wird der Interupt ISR(TIM0_OVF_vect) (Timer/Counter0 Overflow) und das Register TIMSK (Timer Interrupt Mask Register) benutzt. "TIMSK" ohne Zahl kennt der Atmega nicht, deshalb habe ich es in TIMSK0 gewandelt. Nun kann das Programm fehlerfrei compiliert werden, aber es gibt eine Warnung zum ISR(TIM0_OVF_vect) 'ISR(TIM0_OVF_vect)' appears to be a misspelled signal handler. Kann jemand sagen, wo das Problem mit der ISR-Bezeichnung liegt?
Gerhard schrieb: > Kann jemand sagen, wo das Problem mit der ISR-Bezeichnung liegt? Die heißt halt beim ATmega anders. Müsste "TIMER0_OVF_vect" sein. Findest du alles im Datenblatt, dass du sowieso lesen solltest weil die Peripherie nicht überall gleich funktioniert.
Gerhard schrieb: > 'ISR(TIM0_OVF_vect)' appears to be a misspelled signal handler. Solche Fehler kannst du dir selbst klären indem du das entsprechende Header File nach diesen Tokens durchsuchst (in diesem Fall iom168p.h in deinem AVR GCC Verzeichnis).
Danke für die schnellen Antworten! Barter schrieb: > TIMER0_OVF0_vect Korrekt! Die Buchstaben "ER" darf man nicht vergessen! Arduinoquäler schrieb: > Solche Fehler kannst du dir selbst klären indem du das > entsprechende Header File nach diesen Tokens durchsuchst > (in diesem Fall iom168p.h in deinem AVR GCC Verzeichnis). Super, Danke für den Tipp!!!
Auch die Doku zur avrlibc hat alle ISR Handler nach Typ aufgelistet. Unter AVR Studio kann man sie direkt über Help erreichen, mögl. ists bei Atmel Studio auch so.
Tr schrieb: > Die heißt halt beim ATmega anders. Müsste "TIMER0_OVF_vect" sein. > > Findest du alles im Datenblatt Nein, DAS findet er nicht im Datenblatt. Das ist rein deklarativer Scheiss. Sprachabhängig und u.U. sogar Compiler-abhängig. Sowas findet man also logischerweise in den Device-spezifischen Includes des verwendeten Compilers bzw. Assemblers. Bei Assembler ist das ziemlich einfach, weil man das passende Include sowieso "von Hand" angeben muss. Da weiss man also auch sofort (nachdem man erstmal das Prinzip der Nomenklatur der Includes durchschaut hat), wo man sowas nachschauen muss. Bei dieser C-Gülle ist das hingegen zusätzlich hinter einem Haufen völlig sinnloser Präprozesser-Logik verborgen, den man erst einmal durchschauen muss, um herauszufinden, welches Include nun das ist, was der Compiler auch tatsächlich benutzt. OK, ist zwar keine Raketenwissenschaft, aber offensichtlich doch hinreichend komplex, um einen Anfänger auszuschäkeln. Letztlich schuld ist aber Atmel selber. In den allermeisten Fällen sind diese Brüche in der Nomenklatur völlig schwachsinnig und sinnlos. Wenn da mal irgendwer bei Atmel ernsthaft drüber nachgedacht hätte, bevor dieser Schrott auf die Menschheit losgelassen wurde, könnte Millionen Mannstunden eingespart werden, in denen sich gestandenen Programmierer damit befassen müssen, diesen Kram mit Unmassen weiterem Präprozessorcode auszubessern und die Sache damit "portabel" zu gestalten. Das Allerschlimmste aber sind die eigenen Versuche von Atmel, "Kompatibilitäts-patches" in die Includes einzubringen. So blöd, wie die gestrickt sind (offensichtlich mit dem geistigen Horizont eines Architektur-Einsteigers verfasst), richten sie viel mehr Schaden an, als sie Nutzen bringen. Wenn also irgendwo in den Includes der Kommentar "for compatibility" auftaucht, ist höchste Vorsicht geboten... Man muss sofort die eigenen Werke diesbezüglichen daraufhin überprüfen, ob das nicht irgendwo ein Loch aufreisst. Zum Glück ist die AVR8-Architektur samt Peripherie noch einigermaßen überschaubar...
c-hater schrieb: > Nein, DAS findet er nicht im Datenblatt. Das ist rein deklarativer > Scheiss. Schön daß Du mal wieder über Sachen schreibst von denen Du keine Ahnung hast. An die Bezeichnungen von Atmel halten sich alle Compiler und Atmel gibt sogar AplicationNotes zu den Änderungen bei Generationswechseln, z.B. vom Mega8 zum Megaxx8 http://www.atmel.com/images/doc2553.pdf Aber hauptsache Du konntest mal wieder über C und Atmel herziehen.
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.