Zum Inhalt springen

Problem bei einem COM1 Programm


Phade

Empfohlene Beiträge

  • Antworten 67
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

...

3.) Ich sehe das jetzt nur noch als "Hoppla, da will mir jemand einen Baeren aufbinden"

...

:confused: Verstehe ich gerade nicht.... :confused:

Das heißt also, wenn ich nun noch ein, zwei Variablen einbaue, die den Port z.B. liest, würde das Funktionieren?!!

_________________________________________________________________ Ich weiß, dass man einen Port wie eine Datei ansprechen, öffnen, schreiben, lesen und schliessen kann.

Das tue ich aber doch schon in der open_port Variablen, oder ???


...

fd = open("/dev/ttyS0", O_RDRW | O_NOCTTY | O_NDELAY);

...
[/PHP]

Aber wie sage ich ihm das in der main ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

:confused: Verstehe ich gerade nicht.... :confused:
Vermutlich meint realisticer, dass deine Aufgabe und deine Fähigkeiten so weit auseinanderliegen, dass er nicht glaubt, dass jemand das ernsthaft versuchen würde.

Das heißt also, wenn ich nun noch ein, zwei Variablen einbaue, die den Port z.B. liest, würde das Funktionieren?!!
Eine Variable "liest" nicht den Port.

Ich weiß, dass man einen Port wie eine Datei ansprechen, öffnen, schreiben, lesen und schliessen kann.

Das tue ich aber doch schon in der open_port Variablen, oder ???

open_port ist keine Variable, sondern eine Funktion. Diese Begriffe sind aber absolute Grundlagen. In der Funktion open_port öffnest du die serielle Schnittstelle, aber du liest nichts aus.

Aber wie sage ich ihm das in der main ?
Was willst du "ihm" denn "sagen"?

Ähm jetzt nur noch, welchen return denn ??
Maulwurf_der_Schlaue meint den Rückgabewert von fopen. Du weißt, was fopen zurückgibt, wenn der Aufruf fehlschlägt?

Ohne dir zu nahe treten zu wollen, ich fürchte, diese Aufgabe ist für dich mehrere Nummern zu groß. Du hast noch viel zu große Probleme mit den Grundlagen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vermutlich meint realisticer, dass deine Aufgabe und deine Fähigkeiten so weit auseinanderliegen, dass er nicht glaubt, dass jemand das ernsthaft versuchen würde.

Hmmm,.... das ist mir leider auch klar. Nur will ersten mein Betrieb, das ich die Aufgabe hinbekomme und zweitens möchte ich das auch.

Eine Variable "liest" nicht den Port.

open_port ist keine Variable, sondern eine Funktion. Diese Begriffe sind aber absolute Grundlagen. In der Funktion open_port öffnest du die serielle Schnittstelle, aber du liest nichts aus.

Ja, da muss ich gestehen, das ich die Begrifflichkeiten und somit auch die Grundlagen nicht so recht drauf habe. ich hoffe ja mal, das ich die irgendwann mal drauf haben werde..... :(

Was willst du "ihm" denn "sagen"?

Wie er mir den returnwert ausgibt.

Maulwurf_der_Schlaue meint den Rückgabewert von fopen. Du weißt, was fopen zurückgibt, wenn der Aufruf fehlschlägt?

(Jetzt haue ich wieder in die vollen) ich denke doch :

perror("open_port: Unable to open /dev/ttyS0 - ");

Oder :confused: (Ich muss zugeben, das ich jetzt doch etwas verwirrt bin !

Ohne dir zu nahe treten zu wollen, ich fürchte, diese Aufgabe ist für dich mehrere Nummern zu groß. Du hast noch viel zu große Probleme mit den Grundlagen.

Wie schon oben erwähnt, das ist mir schon bekannt, nur schaffe ich es icht, mich irgendwie auf einen Stand zu bringen. Kann mir selbst nicht erklären wie das kommt.

Ich will mich jetzt hier auch nicht rausreden, aber ich hoffe, das ich hier durch eure Hilfe halt etwas lerne, was ich dann behalten kann.....

Thanx,

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hmmm,.... das ist mir leider auch klar. Nur will ersten mein Betrieb, das ich die Aufgabe hinbekomme und zweitens möchte ich das auch.
Ich will dich nicht entmutigen, aber wenn Wille allein reichen würde, um Probleme zu lösen... :)

Wie er mir den returnwert ausgibt.
Warum willst du das in main machen?

Kennst du printf?

(Jetzt haue ich wieder in die vollen) ich denke doch :

perror("open_port: Unable to open /dev/ttyS0 - ");

Die Frage war eigentlich nicht mit Quellcode zu beantworten ;)

Wie schon oben erwähnt, das ist mir schon bekannt, nur schaffe ich es icht, mich irgendwie auf einen Stand zu bringen. Kann mir selbst nicht erklären wie das kommt.

Ich will mich jetzt hier auch nicht rausreden, aber ich hoffe, das ich hier durch eure Hilfe halt etwas lerne, was ich dann behalten kann.....

Das Problem ist, dass dir eine sehr steile Lernkurve bevorsteht, wenn du gleich mit so etwas komplexen anfängst. Was dir fehlt, müsstest du dir in mehreren Wochen, wenn nicht Monaten aneignen. Das ist nichts, was wir dir hier mal eben erklären könnten. Ich rate dir, mit einfacheren Aufgaben Erfahrung zu sammeln.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich will dich nicht entmutigen, aber wenn Wille allein reichen würde, um Probleme zu lösen... :)

Ja, stimmt... :)

Warum willst du das in main machen?

Kennst du printf?

Klar kenne ich printf, nur habe ich eben gedacht, das ich das am besten in der mian Funktion (???) ausgeben lasse.

Die Frage war eigentlich nicht mit Quellcode zu beantworten ;)

War sie denn richtig beantwortet ??? (wenigstens halbwegs???)

Das Problem ist, dass dir eine sehr steile Lernkurve bevorsteht, wenn du gleich mit so etwas komplexen anfängst. Was dir fehlt, müsstest du dir in mehreren Wochen, wenn nicht Monaten aneignen. Das ist nichts, was wir dir hier mal eben erklären könnten. Ich rate dir, mit einfacheren Aufgaben Erfahrung zu sammeln.

Hmmm, na dann machen wir es eben so. Da der Port ja wie eine Datei angesprochen ....usw. werden kann, möchte ich das, was der Thermostat sendet ausgeben. Das Programm soll einmal gucken was da am COM1 ankommt und das dann per printf ausgeben. Das ist doch eigentlich einfach und zu realisieren oder ???

@realisticer, danke für die Links, zwei kenne ich schon, trotzdem nochmals danke und sorry fürs nerven...:rolleyes:

Thanx,

P.S.: Ich hoffe nur, das ich euch nicht zu sehr nerve mit diesem Thema... :rolleyes:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Klar kenne ich printf, nur habe ich eben gedacht, das ich das am besten in der mian Funktion (???) ausgeben lasse.
Funktion ist richtig :)

Aber warum in main?

Ich will damit nicht sagen, dass es falsch ist. Aber man sollte schon begründen können, welcher Code wo steht. Sonst erweckt man den Eindruck, dass der Code eher ein Ergebnis spontaner Launen als von ordentlicher Planung ist. ;)

War sie denn richtig beantwortet ??? (wenigstens halbwegs???)
Nein, eigentlich nicht. fopen gibt einen Nullzeiger zurück, wenn es fehlschlägt.

Das Programm soll einmal gucken was da am COM1 ankommt und das dann per printf ausgeben. Das ist doch eigentlich einfach und zu realisieren oder ???
Ja.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Funktion ist richtig :)

Aber warum in main?

Ich will damit nicht sagen, dass es falsch ist. Aber man sollte schon begründen können, welcher Code wo steht. Sonst erweckt man den Eindruck, dass der Code eher ein Ergebnis spontaner Launen als von ordentlicher Planung ist. ;)

Erschien mir für richtig dies in der main-Funktion ausgeben zu lassen.

Ich habe in einem C++-Buch folgendes gefunden:

FILE *fopen(const char *filname, const char *mode);

Also würde ich das jetzt so schreiben:

FILE *fp;

fp = fopen("/dev/ttyS0", "r");

Richtig???

Ja.

Tolle knappe antwort. ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn der Betrieb, möchte das Du diese Aufgabe als erstes programmierst, dann möchte ich gerne mal die zweite sehen...

Mein Rat ist auch: lerne erstmal Grundlagen.

Z.B. wenn das ganze wie mit Dateien funktioniert, solltest Du das auch erstmal gemacht haben. Dann stellen sich Fragen wie z.B. des Rückgabetyps auch nicht mehr. Gerade wenn dir nur (undokumentierte) Fragmente übergeben werden, wird das sehr schnell schwer.

Ich empfehle dir mal folgendes Machwerk als Ergänzung/Fortführung zu den Links:

Helmut Herold/ Jörg Arndt

C Programmierung unter Linux Unix, Windows

ISBN: 3-89990-123-1

(Nein ich bekomme dafür kein Geld...)

Link zu diesem Kommentar
Auf anderen Seiten teilen

@realisticer, danke für die Links, zwei kenne ich schon, trotzdem nochmals danke und sorry fürs nerven...

Es geht gar nicht darum dass du nervst. Das tust du nicht.

Es ist nur offentsichtlich so, dass du mit der Aufgabe nicht zurecht kommst und

nicht zurecht kommen wirst. Nicht bedingt dadurch, dass du zu bloed dazu

waerst, sondern schlicht weg aus dem Grund, dass dir die noetigen Grundlagen

dazu fehlen.

Du kannst natuerlich Fragen stellen, nur wirst du viele Antworten nicht

verstehen, da dir die eben angesprochenen Grundlagen fehlen.

Das ist wie eine Art Teufelskreislauf. Du Fragst, wir erklaeren. Du verstehst

es nicht und fragst und wir versuchen wieder etwas einfacher zu erklaeren.

Nur: So kommen wir natuerlich nicht weiter. Die Funktion open_port ist ja

jetzt soweit fertig. Du musst sie und die anderen Funktionen nun in der

main-Funktion zusammenfuehren, so dass ein entsprechendes Programm

herauskommt, welches eine spezifische Aufgabe erledigt.

Es kommt so vieles auf einmal zusammen und es duerfte schwer fuer dich

sein, den roten Faden im Auge zu behalten.

Es ist nichts hier boese gemeint.

mfg

realisticer

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mein Rat ist auch: lerne erstmal Grundlagen.

Z.B. wenn das ganze wie mit Dateien funktioniert, solltest Du das auch erstmal gemacht haben. Dann stellen sich Fragen wie z.B. des Rückgabetyps auch nicht mehr. Gerade wenn dir nur (undokumentierte) Fragmente übergeben werden, wird das sehr schnell schwer.

Also, das mit den Dateien haben wir in der Schule durchgenommen. Leider hat es da bei mir etwas gehakt.... :floet:

Ich empfehle dir mal folgendes Machwerk als Ergänzung/Fortführung zu den Links:

Helmut Herold/ Jörg Arndt

C Programmierung unter Linux Unix, Windows

ISBN: 3-89990-123-1

Was soll denn das "Machwerk" kosten ???

(Nein ich bekomme dafür kein Geld...)

:confused: :confused: Wie jetzt ??? :confused: :confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also,

mein Betrieb hat sich mit mir zusammengetzt und eine Aufgabe gesucht.

Wir haben uns dann halt auf diese Aufgabe geeinigt. Ich habe aber auch angemerkt, dass meine C/C++ Kenntnisse nicht ausreichend sind, das wir in der Schule auch noch ganz woanders sind...

Der Betrieb hat dann nur gesagt, mach die Aufgabe, bis sie fertig ist....

Link zu diesem Kommentar
Auf anderen Seiten teilen

nadann schau dir mal die links an die sind auch gut, wenn du noch kein buch zur hand hast:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wir haben uns dann halt auf diese Aufgabe geeinigt. Ich habe aber auch angemerkt, dass meine C/C++ Kenntnisse nicht ausreichend sind, das wir in der Schule auch noch ganz woanders sind...

Der Betrieb hat dann nur gesagt, mach die Aufgabe, bis sie fertig ist....

Wo seid ihr den in C?

Ich kenne ja noch die Qualität meines Unterrichtes in der Schule :(

Spreche mit dem Betrieb ab, dass Du Hilfe benötigst, sei es durch die Hilfe eines C-Programmieres, einer Schulung oder zumindest erstmal durch Literatur. Durch Zeit alleine füllt sich Deine Wissenslücke auch nicht.

Gerade Programmiertechniken in C zu erlernen sollte das Ziel sein und nicht nur das Erlernen des Sprachumfanges.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wo seid ihr den in C?

Ich kenne ja noch die Qualität meines Unterrichtes in der Schule :(

Wir sind nun bei der Objektorientierten Programmierung....und auch mein Lehrer bringt nicht wirklich viel rüber....Ist aber ein anderes Thema....

Spreche mit dem Betrieb ab, dass Du Hilfe benötigst, sei es durch die Hilfe eines C-Programmieres, einer Schulung oder zumindest erstmal durch Literatur. Durch Zeit alleine füllt sich Deine Wissenslücke auch nicht.

Gerade Programmiertechniken in C zu erlernen sollte das Ziel sein und nicht nur das Erlernen des Sprachumfanges.

Hmm, also wenn ich fragen habe, kann ich meinen "Ausbilder" fragen, nur hat der halt auch nicht die Ahnung von C. Und leider haben wir keine Programmierer in unserem Betrieb.

Ich könnte höchstens mal fragen ob der Betrieb mir nicht dieses C-Buch "spendiert ;) ", welches oben angesprochen wurde.

Ich habe da bei meiner Internetsuche folgendes gefunden:

...
#define CDROM "/dev/cdrom"
...
static int open_cdrom (void) {
int fd = open (CDROM, O_RDONLY | O_NONBLOCK);
if (fd == -1) {
if (errno == ENOMEDIUM)
printf ("Keine CD im Laufwerk!\n");
else
perror ("Fehler bei open()");
exit (EXIT_FAILURE);
}
return fd;
}[/PHP]

Jetzt meine Frage, wie kann ich

[PHP]if (errno == ENOMEDIUM)
printf ("Keine CD im Laufwerk!\n");
else
perror ("Fehler bei open()");
exit (EXIT_FAILURE);

so ummodeln, das das auf meinen Port passt. (Also auf den am Server natürlich!!!! ;) )

Ich habe schon begonnen meinen Code wie Folgt umzuschreiben:

#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
#include <iostream.h>

/*
* 'open_port()' - Open serial port 1.
*
* Returns the file descriptor on success or -1 on error.
*/
#define port "/dev/ttyS0"

static int open_port(void)
{
int fd = open (port, O_RDWR | O_NOCTTY | O_NDELAY); // File discriptor for the Port

if (fd == -1)
{
if
perror("open_port: Unable to open /dev/ttyS0 - ");
}

return fd;
}

int main(int argc, char* argv[])
{
int fd = open_port();

if (( fd = fopen ("/dev/ttyS0", O_RDRW)) <0)
{
;//Hier fehlt noch was, ist bekannt
}

return fd;
}[/PHP]

Thanx,

Link zu diesem Kommentar
Auf anderen Seiten teilen


#define port "/dev/ttyS0"

static int open_port(void)
{
int fd = open (port, O_RDWR | O_NOCTTY | O_NDELAY); // File discriptor for the Port

// weißt du wofür open (port, O_RDWR | O_NOCTTY | O_NDELAY);
// steht, denn wenn nicht kann es auch sein das dein prog nicht funktioniert....

if (fd == -1)
{
if

// hier wirst du einen compiler-fehler bekommen,
// weil dein if nicht komplett ist...

perror("open_port: Unable to open /dev/ttyS0 - ");
}

return fd;
}

int main(int argc, char* argv[])
{
int fd = open_port();

// ok hier schaust du ob du den port öffnen kannst


if (( fd = fopen ("/dev/ttyS0", O_RDRW)) <0)
{
;//Hier fehlt noch was, ist bekannt
}

// warum nachst du hier nochmal die portprüfung?? Ausgerdem kannst du
// deiner funktion keine parameter übergeben weil keine angegeben sind in
// deiner funktion...

return fd;
}[/PHP]

ich hoff ernsthaft das ich jetzt nichts falsch gemacht hab (was für ein code :( )

<edit>

nimm nicht perror zur ausgabe her sonder printf weil du bestimmt nicht weiß was perror genau macht...

</edit>

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das mit dem ersten if, ist mir auch gerade erst aufgefallen.

Ich meine es so verstanden zu haben,

O_RDWR bedeutet soviel wie: darf lesen und schreiben

O_NOTTY hängt mit der Baudrate zusammen und

O_NDELAY bedeutet nicht warten.

Ok, wenn ich in der main-Funktion nicht gucken muss ob der Port auf ist, lass ich es weg. Aber wie bekomme ich es hin das main mir die Daten ausgibt, die am Port ankommen???

<edit>

Ich könnte zur not nachschauen war perror so macht.... ;) :mod:

</edit>

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