mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frequenzmessung in C


Autor: tom (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: tom (Gast)
Datum:

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

Autor: Boxi Boxitec (boxi)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Boxi Boxitec (boxi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, dein neues Problem könnte dann eventuell an der Implementierung 
liegen...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welche WinAVR Version? Scheint schon etwas angeschimmelt zu sein.

Autor: Boxi Boxitec (boxi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich pin ein pöser purche!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Boxi Boxitec wrote:
> ich pin ein pöser purche!

Na dann wirf dich mal zu Poden.

Autor: tom (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: tom (Gast)
Datum:

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

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
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 bestätigst du, die Nutzungsbedingungen anzuerkennen.