error: redefinition of 'ISR'

Gast #2708866
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
Angehängte Dateien:
Gast #2708903
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.
Moderator Persönliche Seite #2708920
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 …
Moderator Persönliche Seite #2708943
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.
Gast #2708947
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.
Gast #2708958
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.
Gast #2708960
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
Gast #2708966
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.
Gast #2708968
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.
Gast #2708970
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.
Moderator Persönliche Seite #2708981
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.
Gast #2708984
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.
Gast #2711288
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
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>.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren