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
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
ich rufe die funktion ja innerhalb der datei auf das ist es ja was mich so verwirrt...
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
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...
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
ok...hab den code mal angehängt...der code ist bis auf das wichtigste abgespeckt...den rest hab ich rausgekickt...
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.