mikrocontroller.net

Forum: Compiler & IDEs Fehlermeldung: definded but not used


Autor: Daniela Schröm (idapinky)
Datum:
Angehängte Dateien:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: Daniela Schröm (idapinky)
Datum:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

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

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

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

Autor: Daniela Schröm (idapinky)
Datum:

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

Autor: Daniela Schröm (idapinky)
Datum:

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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

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

Autor: Werner A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Daniela Schröm (idapinky)
Datum:

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

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.