www.mikrocontroller.net

Forum: GCC error: redefinition of 'ISR'


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: klaus (Gast)
Datum:
Angehängte Dateien:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Autor: frame (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Kein Wunder, du hast ja auch zwei Mal in deinem Quellcode eine Funktion 
ISR() deklariert.
Benenne eine davon um, und der Fehler wird verschwinden...

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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>

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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 :-)

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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 …

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: Peter III (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: klaus (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: Peter III (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: frame (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Makros sind die Kapitulationserklärung des SW-Entwicklers.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
frame schrieb:
> Makros sind die Kapitulationserklärung des SW-Entwicklers.

Sinnlose Phrasen sind die Kapitulationserklärung des Forenteilnehmers …

Autor: HildeK (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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
sprintf(ausgabe, "%d:%d:%d:%d%d",std,m,s,z,h); 
in einem Statement?

Bei Verwendung von strcat fehlt auch
#include <string.h>.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net