www.mikrocontroller.net

Forum: Compiler & IDEs GCC Frage


Autor: BAB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und zwar hab ich eine funktion als STATIC definiert...
so nun bringt der compiler folgendes warining:

lcddriver.h:171: warning: `waitbusy' declared `static' but never defined

es funktioniert zwar alles aber trotzdem würde mich interessieren woran 
das liegen könnte

Autor: BAB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so sieht die funktion definition im header aus

static void waitbusy(void);

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Compiler weist dich lediglich daruf hin, dass er in deiner 
Headerdatei einen Funktionsprotoypen gefunden hat aber die eigentliche 
Funktion dazu nirgends ausprogrammiert ist.
Solange du die Funktion nirgendwo aufrufst ist das auch kein Problem.

Gruss
Christian

Autor: BAB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich rufe die funktion ja innerhalb der datei auf das ist es ja was mich 
so verwirrt...

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, nochmal

Das da ist ein Funktionsprototyp:
static void waitbusy(void);

Damit gibts du dem Compiler bekannt, dass es irgendwo eine Funktion 
waitbusy gibt, aber die Funktion selber musst du irgendwo anders noch 
ausprogrammieren in der Form

static void waitbusy (void)
{
// Hier kommt der Code der Funktion hin.
}

Übrigens sollte man static Funktionen nicht in der Headerdatei 
deklarieren, da sie für andere Module ja unsichtbar sein sollten.
In deinem Fall würde ich den Prototypen direkt in das C-File einbauen.
Das ganze sieht dann irgendwie so aus.

#include "lcdlib.h"

static waitbusy(void);

// Programmeinstiegspunkt
void main(void)
{

// Hier ist dein Hauptprogramm
for (;;) {   // Endlosschleife
waitbusy();  // Hier wird die Funktion aufgerufen
}
} // ende der Funktion main


// Funktionsbody der Funktion waitbusy
static waitbusy (void)
{
while (noch nicht busy) {
// nur warten
}
} // ende der Funktion waitbusy

Autor: BAB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich glaube wir reden aneinander vorbei..:D

die funktion ist deklariert und ausprogrammiert und wird auch 
genutzt...das ist ja das komische...
die funktion funktioniert auch...

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, ich hab jetzt mal ein kleines Testprogrämmchen gemacht.
Lässt sich einwandfrei und ohne Fehlermeldung übersetzen.

Wenn du magst kannst du mir ja mal deine Quelldatei(en) schicken. 
Irgendwo muss da ja der Hund begraben sein.
Generell lässt sich sagen, dass man Fehlermeldungen nicht ignorieren 
sollte, auch wenn das Programm offensichtlich korrekt erstellt wird.

Gruss
Christian

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

Bewertung
0 lesenswert
nicht lesenswert
ok...hab den code mal angehängt...der code ist bis auf das wichtigste 
abgespeckt...den rest hab ich rausgekickt...

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast den Code etwas zu stark kastriert.
Wo genau wird jetzt deine Funktion waitbusy() aufgerufen? Ist dies 
innerhalb der Funktion delayus() oder aber möchtest du eventuell sogar 
das waitbusy() aus der main Funktion aufrufen, denn das geht nicht, weil 
du die Funktion ja static deklariert hast. Also kann sowohl waitbusy() 
als auch deluyus() nur innerhalb der Datei lcddriver.c aufgerufen 
werden.
Ich vermute, du möchstest die Funktionen in deinem Hauptprogramm 
verwenden. In diesem Fall darfst du dir Funktionen nicht(!) als static 
deklarieren, sondern ganz normal

void waitbusy(void);
void delyaus(unsigned us);

Gruss
Christian

Autor: BAB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also waitbusy und delayus werden nur innerhalb der lcddriver.c 
aufgerufen und nicht in anderen files like der Main methode...aber wenn 
du das kompiliertst wie es ist, wirst du sehen das der fehler auch 
weiterhin bestehen bleibt da
waitbusy() und delayus() NUR in der lcddriver.c aufgerufen 
werden..:D...und deshalb habe ich die auch als static 
definiert...compiliert das mal und siehst was ich meine..:D

gruss,
kai

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke, ich hab's

Beim Compilieren der Datei lcdtest.c findet der Compiler wegen dem 
Include von lcddriver.h die static-Funktionen. Nun erwartet der Compiler 
aber auch, dass diese Funktionen im aktuellen Scope, also innerhalb 
lcdtest.c programmiert sind, da sie ja als static deklariert wurden. Da 
er diese nicht findet (weil sie in lcddriver.c codiert sind) gibt er die 
Warnungen aus.

Lösung:
Entweder den Include-Befehl in lcdtest.c weglassen oder die 
Funktionsprototypen in lcddriver.c einbauen und in lcddriver.h löschen.

Gruss
Christian

Autor: BAB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
besten dank für deine mühen Christian...:D

gruss,
kai

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.