Hallo Leute, Ich steige zur Zeit von BASCOM auf C (AVR-GCC) um. Schreibe zur Zeit meine Programme um, und bin nun an der Frequenzmessung. Als Grundlage nutze ich den wohl bekannten Code (Holger brenner), der auch hier im Forum zu finden ist. Nun mein Problem: Es werden zwei ISR aufgrufen, eine zum messen der Zeit zwischen zwei Flanken, die andere, um den Zählerüberlauf zu bestimmen. Wenn ich das Beispiel ohne Änderungen übernehme, erhalte ich die Fehlermeldungen: main.c:49: error: redefinition of 'ISR' main.c:27: error: previous definition of 'ISR' was here Der Compiler bemängelt scheinbar die doppelte ISR. Die muss doch aber doppelt sein, oder reicht es, der zweiten ISR einen leicht anderen Namen zu geben? Für Vorschläge zur Lösung dieses Problems bin ich offen. Der C- Code für den unveränderten Quellcode hier aus dem Forum ist dabei.
dein compiler weiß mit ISR nix anzufangen und denkt du definierst eine Funktion mit Namen "ISR". Dies tust du ein Stück weiter unten nochmal und das mag er eben nicht. Ersetze ISR durch SIGNAL, so wie in interrupt.h definiert.
Klingt plausibel, wenn man die namen der "Funktion" ISR ändert, tritt die Fehlermeldung nicht mehr auf. Allerdings tut Sie dann auch nicht mehr das, was sie soll. Werde die Änderungen vornehmen, und mich noch mal melden.
Tja, dein neues Problem könnte dann eventuell an der Implementierung liegen...
Boxi Boxitec wrote: > dein compiler weiß mit ISR nix anzufangen und denkt du definierst eine > Funktion mit Namen "ISR". Dies tust du ein Stück weiter unten nochmal > und das mag er eben nicht. > > Ersetze ISR durch SIGNAL, so wie in interrupt.h definiert. Seit 2 Jahren predigen wir hier den Leuten, dass SIGNAL veraltet ist und nurch noch ISR benutzt werden soll, und dann sowas.
Boxi Boxitec wrote:
> ich pin ein pöser purche!
Na dann wirf dich mal zu Poden.
Hallo nochmal, hab den Vorschlag mit SIGNAL mal umgesetzt, ohne Erfolg. Im Header hab ich mal gestöbert, ohne rauszufinden, warum das nicht geht. Meiner Meinung nach ist die Variante mit dem ISR(...) richtig, die hab ich so im Header gefunden. Lasse mich aber auch gern vom Gegenteil überzeugen, der Header ist als Dateianhang dabei.
An ner alten Version kanns übrigens nicht liegen, Anfang November runtergeladen.
Dann hast du irgendwie Most auf der Platte, evtl. Mischung aus Alt und Neu oder so. Denn das aktuelle WinAVR definiert ISR, aber die Meldungen oben zeigen, dass bei deinem Üversetzungsversuch ISR unbekannt ist. Also: Den Code mal mit "avr-gcc -E ..." übersetzen und in der Ausgabe nachsehen, wo er avr/interrupt.h gefunden hat. Darin darf auch kein "ISR" mehr enthalten sein.
@Boxi: Implementierung war das Zauberwort. Interrupt Header sollte man auch Implementieren. Da ich was WIN AVR angeht Anfänger bin, ein typischer Fehler(glaub ich). Jetzt gehts zumindest. @Andreas Kaiser: Manchmal hat man den Most auch in der Platte. Das selbe Problem wie mit den Tomaten und den Augen.
Da muss ich mal noch ne Frage anhängen: Was bedeutet die Warnung: warning: function declaration isn't a prototype Darauf konnte ich mir noch keinen Reim machen. Ignorieren wäre auch ne Lösung, die mag ich aber nich so sehr. Für etwas erfahrenere Anwender von WIN AVR sicher kein Problem.
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.