Benötige Hilfe bei C

Gast #2691494
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.
Angehängte Dateien:
#2691504
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?
Gast #2691507
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.
Gast #2691508
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?
Gast #2692897
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
...
Gast #2692915
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
#2692924
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
Gast #2692930
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.