Zum Inhalt springen

Problem bei einem COM1 Programm


Phade

Empfohlene Beiträge

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,

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • Antworten 67
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

: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......

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ???

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.....

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 auslesen

Das 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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ....

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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!! :P;) :floet: )

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :D

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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... :rolleyes:

#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,

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich weiß jetzt nicht ob das stimmt was ich sage :D:D 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,

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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,

Link zu diesem Kommentar
Auf anderen Seiten teilen

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>

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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,

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...