Hallo ich habe ein Program wo ich einen kleinen Befehl in die main.c datei hinzugefügt habe und zwar den Befehl: lcd_clrscr(); print_rc5(code_input); Jetzt bekomme ich beim compilieren die Fehlermeldung undefined reference to 'print_rc5' Was mache ich falsch?Bitte verständlich erklären da ich keine guten Programmierkenntnisse habe
Zwar gebe ich dir jetzt keine Antwort auf deine Frage, aber such mal nach "undefined reference" hier im Forum. Du bist nicht der erste der dieses Problem hat! Das bringt dich sicher weiter, auch wenn es etwas lesearbeit ist.
Hi dein Compiler kennt die Funktion nicht! "print_rc5" Wie kommst du auf die Idee diese dort ein zufügen? Vielleicht fehlt dir die Lib dafür! Stephan
Wieso??? schrieb: > > lcd_clrscr(); > print_rc5(code_input); > > Jetzt bekomme ich beim compilieren die Fehlermeldung > > undefined reference to 'print_rc5' undefined reference ist eine Fehlermeldung vom Linker, der die Aufgabe hat, aus den Einzelteilen das komplette Programm zusammenzubauen. Und sie besagt, dass der Linker in den Teilen, die du ihm zum Zusammenbau gegeben hast, keine Implementierung für print_rc5 gefunden hat. Ist ein bischen so, wie wenn du beim IKEA am Tresen stehst und dich beschwerst, dass das Drehelement aus der Anleitung nicht in der Packung war: undefined Reference zu Drehelement. Und der freundliche Herr erklärt dir, dass du die 2te Schachtel aus dem Regal auch noch hättest mitnehmen müssen.
Ja danke für die Antworten,es ist nicht schlimm das Ihr mir die Lösung nicht vorkaut.Das möchte ich auch garnicht. Lesen BILDET!!!
Hallo ich bins nochmal, Also ich glaube ich weiß woran es liegt und zwar habe ich ja einfach den Befehl in die main.C eingefügt.Aber ich habe diese funktion garnicht definiert.Kennt ihr vielleicht eine Seite wo mir erklärt wird wie ich funktionen definiere?Weil ich habe jetzt einfach mal in die Header Datei main.h die funktion print eingefügt mit dem argument (void) was ja für mich nicht richtig ist weil ich ja den RC5 code ausgeben möchte.
ok, der Ansatz war schonmal nicht schlecht. Die Funktion sollte, bevor du sie im c-file (.c) aufrufst, in einer header Datei (.h) stehen mit allen Parametern die sie so erwartet. Die Suchbegriffe sind Deklaration (angeben wie sie von außen aussieht) und Definition (was dann drinnen passiert) Woher kommt die Idee gerade die Funktion print_rc5 zu verwenden? Dort wo die Funktion herkommt findet sich bestimmt eine Deklaration.
Die Idee ist mir gekommen weil ich eine Schaltung habe die uber einen TSOP gesteuert wird und den RC5 code benutzt.Daran ist ein LCD angeschlossen was mir sobiso schon Werte eines SHT11 anzeigt.Weil meine Fernbedienung nicht so toll das RC5 sendet dachte ich mir lass ich mir den RC5 code anzeigen sodas ich die RC5 datei anpassen kann damit ich die Schaltung endlich richtig steuern kann
Wieso??? schrieb: > Hallo ich bins nochmal, > > Also ich glaube ich weiß woran es liegt und zwar habe ich ja einfach den > Befehl in die main.C eingefügt.Aber ich habe diese funktion garnicht > definiert.Kennt ihr vielleicht eine Seite wo mir erklärt wird wie ich > funktionen definiere?Weil ich habe jetzt einfach mal in die Header Datei > main.h die funktion print eingefügt mit dem argument (void) was ja für > mich nicht richtig ist weil ich ja den RC5 code ausgeben möchte. Na ja, irgendwo muss ja die Funktion print_rc5(code_input); herkommen. Sprich: Irgendwer muss sie ja einmal geschrieben haben. Wie kommst du denn auf die Idee, dass es diese Funktion gibt, dass sie genau so heißt und das sie diese Argumente nimmt. So etwas saugt man sich ja nicht einfach aus den Fingern.
Der Ersteller des Programms hat mich darauf hingewissen
Wieso??? schrieb: > Der Ersteller des Programms hat mich darauf hingewissen Schön. Und kannst du eine entsprechende Funktion in dem was der Ersteller geschrieben hat finden?
Nein deswegen muss ich das ja selber irgendwie hinkriegen.Ich muss irgendwie es schaffen den RC5 Code der ja sobiso schon im Programm code benutzt wird in die Print funktion einzufügen
Wieso??? schrieb: > Nein deswegen muss ich das ja selber irgendwie hinkriegen.Ich muss > irgendwie es schaffen den RC5 Code der ja sobiso schon im Programm code > benutzt wird in die Print funktion einzufügen Aus deinem Gebrabbel wird keiner wirklich schlau. Hast du nun eine Funktion print_rc5 oder hast du sie nicht? Wenn nicht, was hindert dich daran, eine zu schreiben? print_rc5 klingt jetzt erst mal nicht gerade nach komplizierter Raketentechnik.
Nein habe die Funktion nicht!!! Ich möchte ja eine funktion schreiben habe ich auch getan aber ich weiß nicht wie ich der Funktion sage das sie den RC5 code verwenden soll
Wieso??? schrieb: > Nein habe die Funktion nicht!!! > > Ich möchte ja eine funktion schreiben habe ich auch getan aber ich weiß > nicht wie ich der Funktion sage das sie den RC5 code verwenden soll Hast du doch schon print_rc5(code_input); Jetzt muss nur noch in der Funktion Code rein, der mit dem übergebenen etwas anfangen kann. Ich geh mal davon aus, dass code_input einfach nur 1 Byte ist (du zeigst ja keinen Code, aus dem man wenigstens mal irgendwas entnehmen könnte). Also lass dir doch ganz einfach mal dieses 1 Byte auf deinem LCD ausgeben. Da stehen dann Zahlen auf dem LCD. Dann drückst du auf deiner Fernsteuerung Tasten und schaust dir an, welche Zahlen kommen. Und daruas ziehst du dann deine Schlüsse, wie du die print_rc5 Funktion aufbohren willst, damit auf deinem LCD auch wirklich 'Lauter' steht, wenn du auf die Lauter Taste drückst. (Oder was auch immer du dir vorstellst, was dann auf dem LCD auftauchen soll) RC5 Code sind erst mal einfach nur Zahlen! Lass sie dir ausgeben und sieh nach welche Zahl welcher Taste entspricht, wenn du was anderes als diese Zahlen auf der Anzeige haben willst. Abgesehen davon: Kauf dir ein C-Buch und fang an C zu lernen.
Hier der Teil aus main.c while(1) // main loop { if (new_rc5_data()) { code_input = get_rc5_code(); // read two bytes from interrupt ! lcd_clrscr(); print_rc5(code_input); Und hier ist die main.h #include <avr/io.h> #include <avr/interrupt.h> #include <stdlib.h> #include <stdio.h> #include "types.h" #include "lcd.h" #define uchar unsigned char #define uint unsigned int #ifndef XTAL #define XTAL 16000000 /**< clock frequency in Hz, used to calculate delay timer */ #endif #define F_CPU 16000000L #define LPM(i) (__LPM_classic__(i)) //---------------------------------------------------------------------- ------------ // Definition Ausgänge //---------------------------------------------------------------------- ------------ #define OUT_PORT PORTA #define OUT1 PA7 // Relais 1 #define OUT2 PA6 // Relais 2 #define OUT3 PA5 // Relais 3 #define OUT4 PA4 // Relais 4 #define OUT5 PA3 // Relais 5 //---------------------------------------------------------------------- ------------ // Definition Eingänge //---------------------------------------------------------------------- ------------ #define xRC5_IN PIND #define xRC5 PD2 // IR input low active #define DCF77_PIN PIND #define DCF77_PORT PORTD #define DCF77_DDR DDRD #define DCF77 PD3 #define DCF77_PON PD4 //---------------------------------------------------------------------- ------------ // Strukturen //---------------------------------------------------------------------- ------------ struct stime { unsigned char mm; unsigned char hh; }; struct ssetup { unsigned char dcf77_on; unsigned char feu_soll; unsigned char tem_soll; struct stime CH3_on; struct stime CH3_off; struct stime CH4_on; struct stime CH4_off; struct stime CH5_on; struct stime CH5_off; struct stime reg_on; struct stime reg_off; unsigned char tem_hyst; unsigned char feu_hyst; }; //---------------------------------------------------------------------- ------------ // globale Variablen //---------------------------------------------------------------------- ------------ extern unsigned int rc5_data; // store result //---------------------------------------------------------------------- ------------ // Funktionsprototypen //---------------------------------------------------------------------- ------------ void ter_menu (void); //Menüführung für Terrariumsteuerung void delay_ms(int ms); //Warte Funktion void set_output( void ); //Ausgänge der Terrariumsteuerung setzen void get_basic_setup(int leer); //Läd die Grundeinstellungen, die in der Funktion eingetragen sind void save_setup(int leer); void load_setup(int leer); void Start_SHT11(void); //Startroutine für den SHT11 Sensor void manual_mode(void); //Handbetrieb
Du bist aber auch merkbefreit. Nicht mal in passende Formatier-Tags oder Anhang (.c/.h) kannst du deinen Code packen.
Karl heinz Buchegger schrieb: > Wie kommst du denn auf die Idee, dass es diese Funktion gibt, dass sie > genau so heißt und das sie diese Argumente nimmt. So etwas saugt man > sich ja nicht einfach aus den Fingern. Das ist der BASCOM- bzw. Bauklötzchenprogrammierungs-Virus... > Ist ein bischen so, wie wenn du beim IKEA am Tresen stehst und dich > beschwerst, dass das Drehelement aus der Anleitung nicht in der Packung > war: undefined Reference zu Drehelement. > Und der freundliche Herr erklärt dir, dass du die 2te Schachtel aus dem > Regal auch noch hättest mitnehmen müssen. Der Vergleich ist GENIAL! Du solltest deine ganzen Beiträge hier im Forum mal zu einem Buch linken ähhh.... zusammenpacken, "C mit Alltagssprache verständlich erklärt" ;-)
Wieso??? schrieb: > Hier der Teil aus main.c > > while(1) // main loop > { > > if (new_rc5_data()) > { > code_input = get_rc5_code(); // read two bytes from interrupt ! und haben diese beiden bytes auch einen Datentyp? > Ich bin zu blöd krieg es nicht hin. Wie gibst du denn woanders Zahlen aufs LCD aus? Du hast doch, wenn ich das richtig verstanden habe, eine Funktion die SHT11 Codes ausgeben kann. An der kannst du dich erst mal orientieren, wie man Dinge am LCD ausgibt. Alles was du fürs erste brauchst, sind HEX-Zahlen am LCD. Das ist nun wirklich pipifax, weil sprintf die ganze Arbeit macht sofern keine andere Funktion dafür im Programm vorhanden ist. Im Übrigen: Verzeih aber etwas am LCD auszugeben, wenn das LCD grundsätzlich schon läuft ist eine Anfängrübung. Das musst du alleine hinkriegen. Genauso wie eine Funktion schreiben. So hat das alles keinen Sinn. Ohne entsprechende Grundlagen ist es sinnlos, da noch weiter zu machen. Wer mit einem Schraubenzieher nicht umgehen kann, sollte nicht einen Benzinmotor auf Diesel umzubauen versuchen.
Karl heinz Buchegger schrieb: > So hat das alles keinen Sinn. Ohne entsprechende Grundlagen ist es > sinnlos, da noch weiter zu machen. Wer mit einem Schraubenzieher nicht > umgehen kann, sollte nicht einen Benzinmotor auf Diesel umzubauen > versuchen. Hausaufgaben...
abc schrieb: > Karl heinz Buchegger schrieb: >> So hat das alles keinen Sinn. Ohne entsprechende Grundlagen ist es >> sinnlos, da noch weiter zu machen. Wer mit einem Schraubenzieher nicht >> umgehen kann, sollte nicht einen Benzinmotor auf Diesel umzubauen >> versuchen. > > Hausaufgaben... Glaub ich ehrlich gesagt gar nicht. Eher jemand, der seine Fähigkeiten wieder mal bei weitem überschätzt hat. Es besteht halt immer noch ein gewaltiger Unterschied zwischen Wollen und Können. Und den wird es auch immer geben. 'Wollen' kann man schnell etwas, interessiert aber keinen. Entscheidend ist, was ein Mann kann und was er nicht kann (tm Captain Jack Sparrow).
Kann auch sein, in letzter Zeit wollen hier so viele ihre Arbeit gemacht haben, da bin ich wohl etwas paranoid geworden...
Ich hab es irgendwie hinbekommen fragt mich nicht wie aber es geht jetzt habe mich durch den vorhandenen Code durchgelesen von SHT bis ich es irgendwie zum laufen gekriegt habe. PS:Ich hasse C++
Wieso??? schrieb: > Ich hab es irgendwie hinbekommen fragt mich nicht wie aber es geht jetzt ganz schlecht. > habe mich durch den vorhandenen Code durchgelesen von SHT bis ich es > irgendwie zum laufen gekriegt habe. und es wird auch nicht besser. > PS:Ich hasse C++ Ich glaube das ist deinem C-Quelltext egal...
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.