Forum: Compiler & IDEs Fehlermeldung: definded but not used


von Daniela S. (idapinky)


Angehängte Dateien:

Lesenswert?

Hallo,

ich bzw. wir versuchen gerade ein Programm zu schreiben, welches ein DCF 
Signal einliest und über Microcontroller wieder ausgibt.

Wir haben ein Programm online gefunden (Orginal unter 
www.http://www.gjlay.de/pub/c-code/dcf77.html) und für unsere 
Bedürfnisse abgeändert. Beim Compailieren erscheint die Fehlermeldung 
defined but not used, kann uns bitte jemand helfen, denn leider sind wir 
echte Nieten im Programmieren.

Wir sind für jeden Rat dankbar.

Es wurde lediglich in der main Dtei etwas geändert der Rest ist 
Identisch mit dem Programm auf dem angegebenem link.

Und falls ihr noch Lust habt könnt ihr noch einen Blick auf die 
Ansteuerung der Ports werfen und mir sagen ob ich überhaub die richtigen 
Befehle verwendet habe?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Daniela Schröm wrote:

> Beim Compilieren erscheint die Fehlermeldung
> defined but not used, [...]

Du solltest zumindest dazu schreiben, wofür diese Meldung kommt.
Vermutlich für die Funktion job_dcf_10ms(), oder?

Das ist übrigens keine Fehlermeldung, sondern eine Warnung.  Sie
warnt dich, dass das Programm Dinge enthält, deren Gültigkeitsbereich
explizit auf die lokale Datei(*) beschränkt worden ist (mit dem
Schlüsselwort "static"), die dann aber gar nicht benutzt werden.
Durch die Einschränkung des Gültigkeitsbereiches kann es der Compiler
bereits prüfen, da sich diese Funktion ja nicht aus einer anderen
Datei heraus rufen ließe.  Würde das "static" fehlen, wäre es global,
und es gäbe keine Warnung, da der Compiler annehmen muss, dass es
von außerhalb gerufen werden kann.

(*) Streng genommen nicht "Datei", sondern "Übersetzungseinheit".  Das
schließt die eigentliche Quelldatei ein sowie alle per #include noch
mit hineingezogenen Dateien.

von Daniela S. (idapinky)


Lesenswert?

Ja, entschuldigung die WARNUNG kommt für job_dcf_10ms()!

Ich hab jetzt mal das "static" entfernt und jetzt werden keine Fehler 
und Warnungen mehr angezeigt, dafür mal danke.

Aber die Fage ist: was ändert sich dadurch? Bleibt dadurch die 
Funktionsfähigkeit bestehen? Also ich mein kann ich dann das Programm 
trotzdem noch die gleichen Ergebnisse für die Ausgabewerte?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Daniela Schröm wrote:

> Aber die Fage ist: was ändert sich dadurch?

Du hast das Symptom bekämpft, nicht die Ursache.  Du hast dem Compiler
die Möglichkeit genommen, den (nach wie vor) vorhandenen toten Code
zu erkennen.  Beseitigung der Ursache wäre es gewesen, die gar nicht
mehr benötigte Funktion job_dcf_10ms() einfach aus dem Quellcode zu
entfernen.  Wenn sie nicht gebraucht wird, warum soll sie dann noch
da stehen?

> Bleibt dadurch die
> Funktionsfähigkeit bestehen?

Die war auch vorher gegeben, es war ja nur eine Warnung.

Ein wenig um die Grundlagen von C wirst du schon nicht ganz drum
herum können, wenn du damit programmieren willst oder sollst.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Der Quelltext wie du ihn jetzt hast, reicht noch nicht.

Ihr müsst noch einen 10ms Takt generieren und damit alle 10ms die 
Funktion job_dcf_10ms() aufrufen. Da die Funktion eine kurze Laufzeit 
hat, kann man deren Aufruf gut innerhalb eines Timer/Counter-Interrupts 
machen.

Als Beispiele für den Interrupt können die main.c aus den Modulen 
Countdown oder Taster-Abfrage von Georg Johann (interessante Seite!) 
dienen.

Zu den Port-Anweisungen: Das sieht OK aus. Wobei man sicher noch Code 
einsparen kann z.B. die Datenrichtung der Ausgänge einmalig zu Beginn 
von main() einstellen.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Der Code der main.c zeigt nur prinzipiell, wie man sich ein Bit vom Port 
besorgt und es an die DCF-Routine übergeben kann.

Das DCF-Zeug selbst ist hardware-unabhängig.

Irgendwer muss die job_dcf_10ms ja aufrufen, und das wurde offenbar 
nicht implementiert. Das Beispiel geht nicht näher auf die Zeitbasis 
bzw. Erzeugung des 10ms-Taktes ein. Dafür gibt's viele Möglichkeiten 
(Timer 0/1/2/3, externes Signal, wait(), ....)

Das static hat den Vorteil, daß wenn die Funktion von einer ISR 
aufgerufen wird, diese geinlinet werden kann. Die job_dcf_10ms() wird ja 
nur einmal gebraucht, und ein Inlinen macht dann sowohl schnelleren als 
auch kleineren Code.

Ohne static wird gcc die Funktion für -Os nicht inlinen.

von Daniela S. (idapinky)


Lesenswert?

> Als Beispiele für den Interrupt können die main.c aus den Modulen
> Countdown oder Taster-Abfrage von Georg Johann (interessante Seite!)
> dienen.

Gut, dass du mich drauf hingewiesen hast. Und sehr nett gleich einen Tip 
mitzugeben.

von Daniela S. (idapinky)


Lesenswert?

Noch ne ganz blöde Frage, gibt´s da n Link für die Seite von Georg Johan

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Klar, da warst du sogar schon!

OK, ich bin bei Links in Forem oft neugierig und habe bei deinem Link 
oben den Deeplink-Teil gestrippt und habe mir die Hauptseite angesehen.

Schau mal in die Elektronik Unterseiten von http://www.gjlay.de/

Klassischer Fall von Perlen im Netz

von Werner A. (Gast)


Lesenswert?


von Daniela S. (idapinky)


Lesenswert?

Ahh, is ja echt toll, !!!DANKE!!!

Dann werd ich dann nächste Woche das in´s Programm zu integrieren.
Wenn ich´s nicht hinbekomm meld ich mich wieder!

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.