Forum: Mikrocontroller und Digitale Elektronik Frequenzmessung in C


von tom (Gast)


Angehängte Dateien:

Lesenswert?

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.

von tom (Gast)


Lesenswert?

Kleiner Nachtrag: Das Display ist für mich hier nicht von Interesse.

von Boxi B. (boxi)


Lesenswert?

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.

von tom (Gast)


Lesenswert?

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.

von Boxi B. (boxi)


Lesenswert?

Tja, dein neues Problem könnte dann eventuell an der Implementierung 
liegen...

von Karl H. (kbuchegg)


Lesenswert?

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.

von Andreas K. (a-k)


Lesenswert?

Welche WinAVR Version? Scheint schon etwas angeschimmelt zu sein.

von Boxi B. (boxi)


Lesenswert?

ich pin ein pöser purche!

von Karl H. (kbuchegg)


Lesenswert?

Boxi Boxitec wrote:
> ich pin ein pöser purche!

Na dann wirf dich mal zu Poden.

von tom (Gast)


Angehängte Dateien:

Lesenswert?

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.

von tom (Gast)


Lesenswert?

An ner alten Version kanns übrigens nicht liegen, Anfang November 
runtergeladen.

von Andreas K. (a-k)


Lesenswert?

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.

von tom (Gast)


Lesenswert?

@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.

von tom (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.