Hallo Ich bekomme bei meinem Avr Projekt immer den Fehler: "redefinition of ISR". Habe auch schon 2 Stunden gegoogelt, bin aber nicht auf den Fehler gekommen. Auch unter dem Link: Beitrag "ISR() ->error: redefinition of 'ISR'" habe ich keine Lösung gefunden. <avr/interrupt.h> ist includiert ich benutze die version 1.7.1 Mikrocontroller: Atmega16 Ich verwende Eclipse unter Fedora 16 Ich hoffe ihr könnt mir helfen ;) lg klaus
Kein Wunder, du hast ja auch zwei Mal in deinem Quellcode eine Funktion ISR() deklariert. Benenne eine davon um, und der Fehler wird verschwinden...
frame schrieb: > Kein Wunder, du hast ja auch zwei Mal in deinem Quellcode eine Funktion > ISR() deklariert. schön das sich auch leute zu wort melden die keine Ahnung von AVR und GCC haben. ISR ist ein Makro und ist an dieser stelle auch 2 mal richtig. Ich würde mal die ausgabe nach dem Preprozesor anschauen, ob das makro ISR auch wirklich aufgelöst wird.
klaus schrieb: > Ich bekomme bei meinem Avr Projekt immer den Fehler: > "redefinition of ISR". Das ist doch bestimmt ne Zeilennummer dabei? Und was soll das da sein? > #include <avr/stdio.h> Das heisst #include <stdio.h>
Johann L. schrieb: > Das heisst #include <stdio.h> woher willst du wissen in welchen Verzeichniss er diese Datei hat? Wenn das nicht stimmen würde hatte sich der compiler schon darüber beschwert.
Peter II schrieb: > Johann L. schrieb: >> Das heisst #include <stdio.h> > > woher willst du wissen in welchen Verzeichniss er diese Datei hat? stdio.h hat in avr/ nix zu suchen. Wenn es ein avr/stdio.h gibt, ist die Installation gründlich verbrazzelt. Ausserdem: Will der OP die Wiki-Artikel volatile sowie atomar lesen :-)
Peter II schrieb: > woher willst du wissen in welchen Verzeichniss er diese Datei hat? <stdio.h> ist ein C-Standard-Header. Wenn dieser nicht über die Standard-Suchverzeichnisse direkt gefunden wird, würde ich der ganzen Toolchain-Installation nicht mehr über den Weg trauen. Vermutlich ist das dann auch was ganz anderes als ein C-Compiler. ;-) Andererseits würde das natürlich prima dazu passen, dass trotz des #include <avr/interrupt.h> ja ISR offenbar nicht als Makro aufgelöst wird …
Johann L. schrieb: > Ausserdem: Will der OP die Wiki-Artikel volatile sowie atomar > lesen :-) auch falsch - er verwendest sie nicht in der main also braucht er kein volatil - es hätte dann nur nachteile.
Peter II schrieb: > er verwendest sie nicht in der main also braucht er kein > volatil Er verwendet sie in zwei voneinander unabhängigen Threads. Allerdings sind ISRs zwangsweise sequence points (weil der Compiler ihren Aufruf nie "sieht"), insofern muss es hier wohl wirklich nicht sein. Dem Compiler bleibt keine andere Wahl, als die jeweiligen globalen Variablen innerhalb der ISR zu lesen. Trotzdem vermute ich mal, dass klaus sich keine derartigen Gedanken überhaupt gemacht hat, sondern nur Glück gehabt hat. Insofern sollte er sich die Artikel wohl trotzdem durchlesen.
Jörg Wunsch schrieb: > Dem Compiler bleibt keine andere Wahl, als die jeweiligen > globalen Variablen innerhalb der ISR zu lesen. und auch wegzuschreiben - er kann sie auch nicht im einem Register belassen. > Trotzdem vermute ich mal, dass klaus sich keine derartigen Gedanken > überhaupt gemacht hat, sondern nur Glück gehabt hat. Insofern sollte > er sich die Artikel wohl trotzdem durchlesen. kann schon sein. Wollte nur damit sagen das man volatile mit bedacht einsetzen sollte und nicht einfach pauschal.
Peter II schrieb: > Wollte nur damit sagen das man volatile mit bedacht einsetzen sollte und > nicht einfach pauschal. hat das hier jemand gesagt? der einzige, der hier pauschal mist erzählt, bist du. einem Johann L. oder Jörg Wunsch was über C erzählen zu können, wirst du in deinem leben nicht mehr fertig bringen. ich auch nicht.
Hallo Wegen dem "<avr/stdio.h>": zuerst hatte ich <stdio.h> includiert, aber die Eclipse markierte dies mit einer Wellenlinie. Diese verschwindet, wenn ich "avr/" davor schreibe. Jedoch ist trotzdem "<stdio.h>" richtig, denn nach dem umändern hats Funktioniert. Aufgrund der Fehlermeldung habe ich an der falschen Stelle nach einer Lösung gesucht. Wäre für mich einfacher gewesen, wenn der Fehler auf die "<avr/stdio.h>" bezogen gewesen wäre. Danke für die schnelle Hilfe lg Klaus
Peter III schrieb: > hat das hier jemand gesagt? ja > Johann L. schrieb: > > Ausserdem: Will der OP die Wiki-Artikel volatile sowie atomar > > lesen :-) zumindest ist der Hinweis hier falsch, es ist hier nicht notwenig > einem Johann L. oder Jörg Wunsch was über C erzählen zu können, wirst du > in deinem leben nicht mehr fertig bringen. naja hier lag Johann L. schon mal falsch.
klaus schrieb: > Ich bekomme bei meinem Avr Projekt immer den Fehler: > "redefinition of ISR". Wie sehen deine Projekteinstellungen bei Eclipse aus? Hast du da vielleicht globale includes? Wenn du ein statisches makefile hast, lad das doch mal mit hoch. Kriegst du andere warnings oder errors? Und vor allem in welchen Zeilen. Und dir fehlt mindestens ein sei() zum Freigeben der Interrupts.
das hier finde ich mehr bedenktlich static char ausgabe[10]; int s=0, m=0 ,std=0, z=0, h=0; strcat(ausgabe,m); ausgabe wird nie wieder leer gemacht und auch m sollte sich so nicht umwandeln lassen.
Peter II schrieb: > naja hier lag Johann L. schon mal falsch. Nein. Der OP sollte ganz sicher diese Artikel lesen. Johann hat nicht dazu geschrieben, dass er deshalb gleich alle globalen Variablen "volatile" machen soll oder überall atomare Zugriffe drumrum bauen. Allerdings sind weder Johann noch Jörg irgendwelche Götter, auch wir können selbstverständlich Fehler machen wie jeder andere Mensch.
Jörg Wunsch schrieb: >> naja hier lag Johann L. schon mal falsch. > Nein. Der OP sollte ganz sicher diese Artikel lesen. Johann hat > nicht dazu geschrieben, dass er deshalb gleich alle globalen > Variablen "volatile" machen soll oder überall atomare Zugriffe > drumrum bauen. warum hat er dann nicht nicht gleich artikel wie itoa oder ähnliches erwähnt. Auf einen Artikel zu verweisen der für den aktuellen code keinerlei auswirkung hat ist ein wenig verwirrent. Eventuell kann ja Johann mal schreiben, worauf er hinaus wollte.
frame schrieb: > Makros sind die Kapitulationserklärung des SW-Entwicklers. Sinnlose Phrasen sind die Kapitulationserklärung des Forenteilnehmers …
Peter II schrieb: > das hier finde ich mehr bedenktlich > > static char ausgabe[10]; > int s=0, m=0 ,std=0, z=0, h=0; > > strcat(ausgabe,m); Ja, das wird zumindest nicht das gewünschte Ergebnis bringen. Warum nicht mit
1 | sprintf(ausgabe, "%d:%d:%d:%d%d",std,m,s,z,h); |
in einem Statement? Bei Verwendung von strcat fehlt auch
1 | #include <string.h>. |
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.