Frequenzmessung in C

Gast #694372
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.
Angehängte Dateien:
Gast #694390
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.
#694405
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.
Gast #694502
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.
Angehängte Dateien:
#694532
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.
Gast #694536
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.
Gast #694541
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.

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