Hallo ich bekommen immer diesen Fehler: expected identifier or '(' before '{' token Hier mein Code: ISR ( TIMER0_OVF_vect ) // Timer0 overflow Interrupt { <========= In Dieser zeile ist der Fehler PORTD ^= (1 << PD1); } MFG REne3233
:
Verschoben durch User
Hier ist er im anhang. Mir ist aufgefallen wen ich das so schreibe: ISR ( TIMER0_OVF_vect ){PORTD ^= (1 << PD1);} Bekomme ich keinen Fehler es funktioniert aber auch nicht.
Einer der Fälle wo sich einer selbst ins Bein schießt, weil er die Kommentare besonders "ästhetisch" haben möchte. Die Zeile gehört mit zum Kommentar, weil du das Zeilenende "weg-escaped" hast. Übrigens: Was hat das Ganze in der Codesammlung zu suchen?
Rene3233 schrieb: > { <========= In Dieser zeile ist der Fehler Nö. Gewöhne dich daran, daß bei C-Compilern die Fehlermeldung in 99% aller Fälle nicht auf den eigentlichen Fehler hinweist, sondern selbiger sich ein paar Zeilen davor befindet. Ich vermute mal, daß du bei der Formulierung der Interruptprozedur nen Fehler gemacht hast. W.S.
Danke es geht wieder das wuste ich nicht das man nach so welchen kommentaren immer eine zeile platz lassen muss. Wo muss ich den so welche Threds sonst stellen?
Rene3233 schrieb: > Wo muss ich den so welche Threds sonst stellen? http://www.mikrocontroller.net/forum/mikrocontroller-elektronik
Rene3233 schrieb: > Danke es geht wieder das wuste ich nicht das man nach so welchen > kommentaren immer eine zeile platz lassen muss. Muss man nicht, wenn man die letzen beiden Zeichen in deinen Kommentaren weglässt. Denn in deinem Kommentar ist das vermeintliche Abschlusszeichen "\\" Quatsch! "\" wird von jedem Compiler als Zeilenfortsetzung verstanden und damit gehört der ISR-Aufruf auch noch zum Kommentar. Jetzt steht die darauf folgende öffnende Klammer alleine rum. Der Kommentar mit "//" hat nun mal kein definiertes Ende-Zeichen. Du könntest aber nochmals "//" verwenden, oder auch (fast) jedes andere mit Ausnahme von "\". Fast: die Kombination "/*" am Ende wäre natürlich auch falsch!
1 | //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\
|
2 | // Overflow Interrupt Time \\
|
3 | //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\
|
4 | // ^^ die gehören weg!
|
5 | ISR ( TIMER0_OVF_vect ) // Timer0 overflow Interrupt |
6 | {
|
7 | PORTD ^= (1 << PD1); |
8 | }
|
Wenn du unbedingt optische Rahmen benötigst, dann mach's doch so:
1 | /*******************************************************/
|
2 | /* Overflow Interrupt Time */
|
3 | /*******************************************************/
|
4 | ISR ( TIMER0_OVF_vect ) // Timer0 overflow Interrupt |
5 | ...
|
und ich dachte "//" ist nur zeilenbezogen ?! wie kann dann der interrupt da hinein geraten. man muss doch ein "//" nicht beenden, diese kommentarfunktion dient doch extra dazu NUR eine zeile zu kommentieren... hingegen "/* */" mehrere zeilen kommentieren kann
busche schrieb: > und ich dachte "//" ist nur zeilenbezogen ?! Das Problem ist im eigentlichen Sinne nicht das // sondern das \ am Zeilenede. Eine Zeile im Editor, die mit einem \ gefolgt von einem Zeilendezeichen (Carriage Return Linefeed) aufhört, wird vom Präprozessor als Zeilfortsetzungszeichen gewertet. D.h. Du möchtest gerne aus irgendwelchen Gründen eine logische Zeile in mehrere physische Zeilen auftrennen, möchtest aber haben, das der COmpiler das als eine einzige Zeile ansieht. Aus
1 | irgendwas \
|
2 | irgendwas_anderes
|
macht der Präprozessor
1 | irgendwas irgendwas_anderes |
indem er den COntuniation Character auswertet und wie befohlen die Zeilen zusammengezogen hat. Bei dir ist das eben
1 | // irgendwas \
|
2 | irgendwas_anderes
|
was vom Präprozessor zu
1 | // irgendwas irgendwas_anderes
|
zusammengezogen wird. Und damit findet sich das 'irgendwa_anderes' plötzlich im Kommentar wieder. > wie kann dann der interrupt > da hinein geraten. Das passiert hauptsächlich dadurch, das der Programmierer kein C-Buch gelesen hat. Denn da würden solche Sachen (und noch viele mehr) nämlich drinn stehen. Unter anderem auch die Reihenfolge, in der der Präprozessor bestimmte Dinge auswertet und Codemodifikationen vornimmt
busche schrieb: > und ich dachte "//" ist nur zeilenbezogen ?! Ist es auch. Aber das \ am Zeilenende setzt die syntaktische Zeile in der nächsten physischen Zeile fort.
ok, mein fehler ... ich benutze eben "//" OHNE "\\" am ende, deswegen sind meine kommentare auch nur zeilenbezogen. eure erläuterung war mir neu, wieder was dazu gelernt
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.