Phade Geschrieben 17. Mai 2005 Geschrieben 17. Mai 2005 Hallöchen zusammen, ich habe mir da ein Programm zusammengeschustert und schon mehrmals verbessert. Momentan stehe ich vor einer Mauer und weiß nicht mehr weiter. Ich kann diese Errors nicht zuordnen.... Wiß jemand zu welchen Headerdateien diese Deklarationen gehören??? term.cpp: In function `void seriellenport_auslesen(char*)': term.cpp:13: error: `proben' undeclared (first use this function) term.cpp:13: error: (Each undeclared identifier is reported only once for each function it appears in.) term.cpp:15: error: `TIOCMGET' undeclared (first use this function) term.cpp:15: error: `temp' undeclared (first use this function) term.cpp:15: error: `ioctl' undeclared (first use this function) term.cpp:16: error: `loops' undeclared (first use this function) term.cpp:19: error: `close' undeclared (first use this function) term.cpp: In function `void ergebnis_auswerten(int, int, int)': term.cpp:46: error: `counter' undeclared (first use this function) term.cpp: In function `void sensoren_abfragen(int)': term.cpp:61: error: `flag' undeclared (first use this function) term.cpp:71: error: `TIOCM_CD' undeclared (first use this function) term.cpp:72: error: `TIOCM_CTS' undeclared (first use this function) term.cpp:73: error: `TIOCM_DSR' undeclared (first use this function) term.cpp:74: error: `TIOCM_RI' undeclared (first use this function) term.cpp:79: error: `sensorcodes' undeclared (first use this function) term.cpp:79: error: `strncmp' undeclared (first use this function) term.cpp:79: error: syntax error before numeric constant term.cpp:85: error: `errechnete_werte' undeclared (first use this function) term.cpp:58: warning: unused variable `char*pos2' term.cpp:57: warning: unused variable `char*pos1' term.cpp:56: warning: unused variable `char teilstr1[30]' term.cpp:55: warning: unused variable `FILE*results' term.cpp:54: warning: unused variable `long int l' term.cpp: At global scope: term.cpp:88: error: syntax error before `}' token[/PHP] Wäre toll wenn ihr mir da weiterhelfen könntet.... Thanx, Zitieren
Klotzkopp Geschrieben 17. Mai 2005 Geschrieben 17. Mai 2005 Wäre toll, wenn du den Code dazu gezeigt hättest. So kann man nur sagen, dass du in term.cpp, Zeile 13, einen Bezeichner "proben" benutzt, den du nicht vorher deklariert hast. Zitieren
Phade Geschrieben 17. Mai 2005 Autor Geschrieben 17. Mai 2005 :floet: Kann ja mal passieren.....sorry..... #include <sys/types.h> #include <sys/stat.h> #include <termios.h> #include <fcntl.h> #include <stdio.h> void seriellenport_auslesen(char* port) { int fd, i, x; fd = open (port, O_RDWR | O_NOCTTY | O_NDELAY); // Schnittstelle oeffnen for (i=0;i<proben;i++) { ioctl (fd, TIOCMGET, &temp[i]); // Proben * Werte einlesen for (x=0;x<loops;x++); } close (fd); // Schnittstelle schliessen } void ergebnis_auswerten(int index, int bit, int invers) { float hi, low; int i; hi=0; // Zaehler zuruecksetzen if (invers == 0) { for (i=0;i<proben;i++) if (temp[i] & bit) hi++; // Anzahl gesetzter Bits ermitteln hi = proben-hi; } // Low ist die Differenz if (invers == 1) { for (i=0;i<proben;i++) if (temp[i] & bit) low++; // Anzahl gesetzter Bits ermitteln hi = proben-low; } counter[index][4]=counter[index][2];counter[index][5]=counter[index][3]; counter[index][2]=counter[index][0];counter[index][3]=counter[index][1]; counter[index][0]=hi; counter[index][1]=low; } void sensoren_abfragen(int s) // wird zeitgesteuert aufgerufen { int i; long l; FILE *results; char teilstr1 [30]; char *pos1; char *pos2; float c0, c1; if (flag[1] == 1) { ergebnis_auswerten(1,0x80,1); ergebnis_auswerten(2,0x40,0); ergebnis_auswerten(3,0x20,0); ergebnis_auswerten(4,0x10,0); } if (flag[4] == 1) { seriellenport_auslesen("/dev/ttyS0"); ergebnis_auswerten(13,TIOCM_CD,0); ergebnis_auswerten(14,TIOCM_CTS,0); ergebnis_auswerten(15,TIOCM_DSR,0); ergebnis_auswerten(16,TIOCM_RI,0); } for (i=1;i<29;i++) { if (strncmp("01",sensorcodes[i],2) 00 =) // Temperatur auslesen { if (valid[i] == 1) { c0 = counter[i][0] + counter[i][2] + counter[i][4]; c1 = counter[i][1] + counter[i][3] + counter[i][5]; errechnete_werte[i] = 212.766 * (c0/(c0+c1+1)-0.32); } } } }[/PHP] Der Quelltext...... Zitieren
Maulwurf_der_Schlaue Geschrieben 17. Mai 2005 Geschrieben 17. Mai 2005 [...] void seriellenport_auslesen(char* port) { [...] for (i=0;i<proben;i++) [...] [/PHP] auf die schnelle hab ich nicht gesehen wo proben deklariert ist... und außerdem hat Klotzkopp das schon angemerkt... Zitieren
Phade Geschrieben 17. Mai 2005 Autor Geschrieben 17. Mai 2005 auf die schnelle hab ich nicht gesehen wo proben deklariert ist... und außerdem hat Klotzkopp das schon angemerkt... Ok, habe proben jetzt als int am anfang deklariert. Ich kann jetzt aber nicht genau sagen, ob das so richtig ist....jetzt bekomme ich noch folgendes: term.cpp: In function `void seriellenport_auslesen(char*)': term.cpp:16: error: `TIOCMGET' undeclared (first use this function) term.cpp:16: error: (Each undeclared identifier is reported only once for each function it appears in.) term.cpp:16: error: `temp' undeclared (first use this function) term.cpp:16: error: `ioctl' undeclared (first use this function) term.cpp:17: error: `loops' undeclared (first use this function) term.cpp:20: error: `close' undeclared (first use this function) term.cpp: In function `void ergebnis_auswerten(int, int, int)': term.cpp:31: error: `proben' undeclared (first use this function) term.cpp:47: error: `counter' undeclared (first use this function) term.cpp: In function `void sensoren_abfragen(int)': term.cpp:62: error: `flag' undeclared (first use this function) term.cpp:72: error: `TIOCM_CD' undeclared (first use this function) term.cpp:73: error: `TIOCM_CTS' undeclared (first use this function) term.cpp:74: error: `TIOCM_DSR' undeclared (first use this function) term.cpp:75: error: `TIOCM_RI' undeclared (first use this function) term.cpp:80: error: `sensorcodes' undeclared (first use this function) term.cpp:80: error: `strncmp' undeclared (first use this function) term.cpp:80: error: syntax error before numeric constant term.cpp:86: error: `errechnete_werte' undeclared (first use this function) term.cpp:59: warning: unused variable `char*pos2' term.cpp:58: warning: unused variable `char*pos1' term.cpp:57: warning: unused variable `char teilstr1[30]' term.cpp:56: warning: unused variable `FILE*results' term.cpp:55: warning: unused variable `long int l' term.cpp: At global scope: term.cpp:89: error: syntax error before `}' token[/PHP] Ist das nicht der gleiche fehler ??? Zitieren
Maulwurf_der_Schlaue Geschrieben 17. Mai 2005 Geschrieben 17. Mai 2005 wo deklarierst du denn O_RDWR // O_NOCTTY // O_NDELAY in fd = open (port, O_RDWR | O_NOCTTY | O_NDELAY); // Schnittstelle oeffnen wenn bei deiner Fehlermeldung xxxx undefined steht dann hast du die Variable / Funktion nicht deklariert.... Zitieren
Klotzkopp Geschrieben 17. Mai 2005 Geschrieben 17. Mai 2005 Da fehlen jede Menge Deklarationen. Wir können dir da auch nicht mehr sagen als der Compiler, weil die fehlenden Deklarationen nicht Bestandteil des Standards sind. Du wirst das nicht lösen können, indem du die beanstandeten Bezeichner einfach irgendwie deklarierst. Dann ist zwar der Compiler zufrieden, aber das Programm wird mit hoher Wahrscheinlichkeit nicht funktionieren. Wenn der Code nicht von dir ist, hast du wohl beim Übernehmen etwas Entscheidendes weggelassen oder gelöscht. Die überzählige geschweifte Klammer am Ende ist ein Indiz dafür. Wenn das Programm sich schon mal kompilieren ließ: Was hast du denn zuletzt geändert? Zitieren
Maulwurf_der_Schlaue Geschrieben 17. Mai 2005 Geschrieben 17. Mai 2005 Gibt es vielleicht schon eine Funktion in irgendeiner Bibliothek die auf die Com-Schnittstelle zugreift, oder willst du das von hand machen.. Zitieren
Phade Geschrieben 17. Mai 2005 Autor Geschrieben 17. Mai 2005 Da fehlen jede Menge Deklarationen. Wir können dir da auch nicht mehr sagen als der Compiler, weil die fehlenden Deklarationen nicht Bestandteil des Standards sind. Du wirst das nicht lösen können, indem du die beanstandeten Bezeichner einfach irgendwie deklarierst. Dann ist zwar der Compiler zufrieden, aber das Programm wird mit hoher Wahrscheinlichkeit nicht funktionieren. Wenn der Code nicht von dir ist, hast du wohl beim Übernehmen etwas Entscheidendes weggelassen oder gelöscht. Die überzählige geschweifte Klammer am Ende ist ein Indiz dafür. Wenn das Programm sich schon mal kompilieren ließ: Was hast du denn zuletzt geändert? Also, ich habe den Code von der Lieferantenfirma als Codebeispiel bekommen. So habe ich nichts mit dem Quelltext weltbewegendes gemacht, außer, dass ich jetzt halt proben als int deklariert habe. Die Klammern am Schluss passen genau. Da ist keine zu viel oder zu wenig....das sagt mir mein Editor.... Ach ja, vielleicht is das ja etwas praktisch zu wissen, ich arbeite unter Linux..... Zitieren
Klotzkopp Geschrieben 17. Mai 2005 Geschrieben 17. Mai 2005 Also, ich habe den Code von der Lieferantenfirma als Codebeispiel bekommen.Dann solltest du dich an den Lieferanten wenden. Der Code ist fehlerhaft und unvollständig. if (strncmp("01",sensorcodes[i],2) [b]00 =[/B]) // Temperatur auslesenDas soll wohl eher == 0 heißen. Wer immer diesen Code geschrieben hat, hat ihn nicht selbst kompiliert, sonst wäre so etwas aufgefallen. Die Klammern am Schluss passen genau. Da ist keine zu viel oder zu wenig....das sagt mir mein Editor....Ja, stimmt. Die "eigenwillige" Einrückung hatte mich getäuscht. Zitieren
Phade Geschrieben 17. Mai 2005 Autor Geschrieben 17. Mai 2005 Ok, das 00 = war mein Fehler, den habe ich wohl beim abtippen gebaut.... Die Klammern durch den php-code Button fabriziert.... Die ÖLieferfirma sagt das Sie nicht mehr Code abgeben kann/darf oder will.... und ich bleibe auf dem Schlauch .... Zitieren
Klotzkopp Geschrieben 17. Mai 2005 Geschrieben 17. Mai 2005 Ok, das 00 = war mein Fehler, den habe ich wohl beim abtippen gebaut....Du tippst Code ab? :eek Die Klammern durch den php-code Button fabriziert....Das liegt nicht an den Tags im Forum, sondern daran, dass du zum Einrücken Tabs und Leerzeichen gemischt benutzt. Die ÖLieferfirma sagt das Sie nicht mehr Code abgeben kann/darf oder will.... und ich bleibe auf dem Schlauch ....Was genau wurde denn da geliefert? Soweit ich das als Linux-Laie erkennen kann, kommt da gar keine Drittanbieterbibliothek zum Einsatz. Zitieren
Phade Geschrieben 17. Mai 2005 Autor Geschrieben 17. Mai 2005 Du tippst Code ab? :eek Ja, da die Lieferfirma mir diese Codefragmente zur Verfügung gestellt hat. Das liegt nicht an den Tags im Forum, sondern daran, dass du zum Einrücken Tabs und Leerzeichen gemischt benutzt. Ok, auch dass ein Fehler von mir.... Was genau wurde denn da geliefert? Soweit ich das als Linux-Laie erkennen kann, kommt da gar keine Drittanbieterbibliothek zum Einsatz. Also es wurde ein Thermometer geliefer, mit dem ich die Temperatur in einem Serverraum z.B. messen kann. Auf diesem Server ist nun Suse Linux 9.1 installiert und der Thermostat an der seriellen Schnittstelle angeschlossen. Der COM1 ist auch im BIOS aktiviert. Zu diesem Thermostat gib es eine eigene Software, die aber mein Betrieb nicht haben wollte, sonder ich solte ein "kleines" C++-Programm schreiben, mit dem ich die Temperatur am Seriellen Port auslesen kann. Das dumme ist nur, ich müsste die Codefragmente des Lieferanten nutzen, da das Thermometer nur mit Pulsweitenmodulation arbeitet und nicht mit alphanumerischen Signalen.... Die... #include <....h> . . . . [/PHP]...habe ich mir im Internet und in Linux zusammengesucht... :mod: Ich weiß selbst das das kein Super Projekt ist für ein Programmieranfänger ist, wie ich einer bin, nur ich möchte halt diese Aufgabe bestreiten, da ich auch ja etwas lernen möchte :cool: (ich habe ja auch schon was gelernt!!! "Nimm niemals solche Aufgaben an!! :floet: ) Zitieren
Klotzkopp Geschrieben 17. Mai 2005 Geschrieben 17. Mai 2005 Ok, auch dass ein Fehler von mir.... Kein Fehler, ich wollte nur den Grund klarstellen Zu diesem Thermostat gib es eine eigene Software, die aber mein Betrieb nicht haben wollte, sonder ich solte ein "kleines" C++-Programm schreiben, mit dem ich die Temperatur am Seriellen Port auslesen kann. Dann kann ich verstehen, warum die keinen vollständigen Code rausrücken wollen Das dumme ist nur, ich müsste die Codefragmente des Lieferanten nutzen, da das Thermometer nur mit Pulsweitenmodulation arbeitet und nicht mit alphanumerischen Signalen....Ich glaube nicht, dass dir das Codefragment besonders viel nützt. Das scheint ein Auszug aus einem erheblich größeren Programm zu sein. sensorcodes z.B. ist ein Array von mindestens 29 Strings, deren Inhalte dynamisch geprüft werden. Diese Inhalte werden aber in dem Fragment nirgendwo gesetzt. Gibt es eine Dokumentation? Zitieren
Phade Geschrieben 17. Mai 2005 Autor Geschrieben 17. Mai 2005 Gibt es eine Dokumentation? Ich sag es mal kurz und schmertzlos..... Nö....nur einen kurzen Text in dem steht, wie das Messprinzip ist und wie der Messverlauf abläuft.....sonst nüschts.... Zitieren
Phade Geschrieben 18. Mai 2005 Autor Geschrieben 18. Mai 2005 Malzeit, ich habe gestern und heute vormittag mal folgenden Code zusammengesucht/-geschrieben, um anders an den COM1 zu gelangen. Vielleicht schaffen "wir" es mit diesem Code "zusammen" etwas zu erreichen... #include <stdio.h> // Standard input/output definitions #include <string.h> // String function definitions #include <unistd.h> // UNIX standard functiondefinations #include <fcntl.h> // File controll definations #include <errno.h> // Error number definations #include <termios.h> // POSIX terminal controll definations /* * 'open_port()' - Open serial port 1. * * Returns the file descriptor on success or -1 on error. */ int open_port(void) { int fd; // File discriptor for the Port fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1) { /* * Could not open Port. */ perror("open_port: Unable to open /dev/ttyS0 - "); } else fcntl(fd, F_SETFL, FNDELAY); return (fd); }[/PHP] Wenn ich diesen nun Kompilieren möchte bekomme ich folgende Meldung: [code]Phade@isesrv101:~/C-Programme> gcc port.cpp /usr/lib/gcc-lib/i586-suse-linux/3.3.3/../../../crt1.o(.text+0x18): In function `_start': ../sysdeps/i386/elf/start.S:98: undefined reference to `main' /tmp/ccGWuVPS.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0' collect2: ld returned 1 exit status Phade@isesrv101:~/C-Programme>[/code] Weiß eventuell jemand was ich da falsch gemacht habe :confused: Ich finde einfach keinen Anfangspunkt. (Zur Verteidigung, den Anfang habe 1:1 übernommen) Thanx, Zitieren
Maulwurf_der_Schlaue Geschrieben 18. Mai 2005 Geschrieben 18. Mai 2005 ich weiß jetzt nicht ob das stimmt was ich sage aber ich hätts so versucht: int open_port() und nicht so (ich weiß natürlich nicht ob das unter linux mit void als parameter aufgerufen werden muss)... int open_port(void) Zitieren
Phade Geschrieben 18. Mai 2005 Autor Geschrieben 18. Mai 2005 ich weiß jetzt nicht ob das stimmt was ich sage aber ich hätts so versucht: int open_port() und nicht so (ich weiß natürlich nicht ob das unter linux mit void als parameter aufgerufen werden muss)... int open_port(void) Also ich muss leider sagen, das dann die gleiche Meldung vom Compiler kommt wie bei der unveränderten.... Ich weiß momentan auch nicht, was der Compiler von mir will !!! Ich meine das diese Meldung nüschts mit dem eigentlichen Code zu tun hat.... Aber wie gesagt, isch weiß et net.... thanx, Zitieren
realisticer Geschrieben 18. Mai 2005 Geschrieben 18. Mai 2005 Malzeit, ich habe gestern und heute vormittag mal folgenden Code zusammengesucht/-geschrieben Ja, das ist auch das Hauptproblem. Phade@isesrv101:~/C-Programme> gcc port.cpp /usr/lib/gcc-lib/i586-suse-linux/3.3.3/../../../crt1.o(.text+0x18): In function `_start': ../sysdeps/i386/elf/start.S:98: undefined reference to `main' /tmp/ccGWuVPS.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0' collect2: ld returned 1 exit status Phade@isesrv101:~/C-Programme> Weiß eventuell jemand was ich da falsch gemacht habe :confused: Ich finde einfach keinen Anfangspunkt. (Zur Verteidigung, den Anfang habe 1:1 übernommen) Thanx, gcc durch g++ ersetzen. Oder du musst explizit libstdc++ mitlinken. mfg realisticer Zitieren
Phade Geschrieben 18. Mai 2005 Autor Geschrieben 18. Mai 2005 Ja, das ist auch das Hauptproblem. gcc durch g++ ersetzen. Oder du musst explizit libstdc++ mitlinken. :confused: :confused: :confused: Sorry, aber ich bekomme trotzdem die selbe Meldung.... :confused: :confused: :confused: (So langsam komme ich mir verars..ht vor...vom Compiler) thanx, Zitieren
realisticer Geschrieben 18. Mai 2005 Geschrieben 18. Mai 2005 Hast du ueberhaupt eine main-Funktion? mfg realisticer Zitieren
Phade Geschrieben 18. Mai 2005 Autor Geschrieben 18. Mai 2005 Ok, habe nun folgenden Code und Fehlermeldung: #include <stdio.h> // Standard input/output definitions #include <string.h> // String function definitions #include <unistd.h> // UNIX standard functiondefinations #include <fcntl.h> // File controll definations #include <errno.h> // Error number definations #include <termios.h> // POSIX terminal controll definations /* * 'open_port()' - Open serial port 1. * * Returns the file descriptor on success or -1 on error. */ main open_port() { int fd; // File discriptor for the Port fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1) { /* * Could not open Port. */ perror("open_port: Unable to open /dev/ttyS0 - "); } else fcntl(fd, F_SETFL, FNDELAY); return (fd); } Fehlermeldung: Phade@isesrv101:~/C-Programme> g++ port.cpp port.cpp:14: error: syntax error before `)' token port.cpp:18: error: ISO C++ forbids declaration of `fd' with no type port.cpp:19: error: syntax error before `if' Phade@isesrv101:~/C-Programme> Zitieren
Maulwurf_der_Schlaue Geschrieben 18. Mai 2005 Geschrieben 18. Mai 2005 <edit> war zu langsam... bin für nen button "Thread zurückziehen" oder so.. </edit> Zitieren
realisticer Geschrieben 18. Mai 2005 Geschrieben 18. Mai 2005 Weisst du eigentlich, wie ein gueltiges C/C++-Programm aussieht? Ich empfehle dir mal folgendes: http://tutorial.schornboeck.net/inhalt.htm #include <stdio.h> // Standard input/output definitions #include <string.h> // String function definitions #include <unistd.h> // UNIX standard functiondefinations #include <fcntl.h> // File controll definations #include <errno.h> // Error number definations #include <termios.h> // POSIX terminal controll definations /* * 'open_port()' - Open serial port 1. * * Returns the file descriptor on success or -1 on error. */ int open_port() { int fd; // File discriptor for the Port fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1) { /* * Could not open Port. */ perror("open_port: Unable to open /dev/ttyS0 - "); } else fcntl(fd, F_SETFL, FNDELAY); return (fd); } int main(int argc, char* argv[]) { /*das ist die hauptfunktion deines programms. *von hieraus wird alles aufgerufen. *z.b.: */ int fd = open_port(); //tue irgendwas mit fd (was weiss ich, lesen, schreiben etc.) return 0; } mfg realisticer Zitieren
Phade Geschrieben 18. Mai 2005 Autor Geschrieben 18. Mai 2005 Also, ich habe mal den letzten vorschlag übernommen und siehe da, der Compiler Compiliert!!!!! :mod: Nur, wenn ich nun die Compilierte Datei dann Ausführen möchte, passiert entweder nüschts, oder das Terminal sagt mir keine Berechtigung..... Siehe Codes.... Hier der Code: #include <stdio.h> // Standard input/output definitions #include <string.h> // String function definitions #include <unistd.h> // UNIX standard functiondefinations #include <fcntl.h> // File controll definations #include <errno.h> // Error number definations #include <termios.h> // POSIX terminal controll definations /* * 'open_port()' - Open serial port 1. * * Returns the file descriptor on success or -1 on error. */ int open_port() { int fd; // File discriptor for the Port fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1) { /* * Could not open Port. */ perror("open_port: Unable to open /dev/ttyS0 - "); } else fcntl(fd, F_SETFL, FNDELAY); return (fd); } int main(int argc, char* argv[]) { int fd = open_port(); //tue irgendwas mit fd (was weiss ich, lesen, schreiben etc.) return 0; }[/PHP] Hier das Terminal: [code]Phade@isesrv101:~/C-Programme> ./port Phade@isesrv101:~/C-Programme> ./port.cpp bash: ./port.cpp: Keine Berechtigung Phade@isesrv101:~/C-Programme> su Password: isesrv101:/home/Phade/C-Programme # ./port.cpp bash: ./port.cpp: Keine Berechtigung isesrv101:/home/Phade/C-Programme # ./port[/code] Wie zu sehen, habe ich es auch als Root versucht. Hier habe ich laut Terminal ja keine Berechtigung...... Weiß da jemand weiter ???? Thanx, Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.