hallo Leute,
ich sende und empfangen Daten(String) über serielle Schnittstelle. Die
Kommunikation ist zwischen einem Mikrocontroller und einem PC(linux)
.Jedes empfangene String ist mit einem '\n' abgeschlossen. Mit dem
aktuellen Programm kann ich nur ein String empfangen. Wenn ich ein
Timeout einfüge, kann ich mehrere String nacheinander auslesen, aber ich
muss das Programm in diesem Fall mit der Tastekombination strg+C
abbrechen.
Wie kann ich dieses Problem lösen.
Anbei das Programm.
ich danke euch.
gast schrieb:
> hallo Leute,>> ich sende und empfangen Daten(String) über serielle Schnittstelle. Die> Kommunikation ist zwischen einem Mikrocontroller und einem PC(linux)> .Jedes empfangene String ist mit einem '\n' abgeschlossen. Mit dem> aktuellen Programm kann ich nur ein String empfangen. Wenn ich ein> Timeout einfüge, kann ich mehrere String nacheinander auslesen, aber ich> muss das Programm in diesem Fall mit der Tastekombination strg+C> abbrechen.> Wie kann ich dieses Problem lösen.
Du sagst doch selbst, dass 'jeder' String mit einem '\n' abgeschlossen
ist.
Wie wäre es, wenn du darauf ganz einfach reagierst?
Sobald ein '\n' daherkommt ist der String fertig. Du verarbeitest ihn
und schon kann der nächste String empfangen werden.
Mit ist dein Problem ehrlich gesagt nicht wirklich klar.
Laut deinem Kommentar wartet read ja sowieso, bis eine Zeile vollständig
ist
Als Grundschleife:
1
intPrintReceivedData(void)
2
{
3
while((res=read(fd,buf,sizeof(buf))){
4
buf[res]='\0';
5
printf(buf);
6
}
7
}
Fragen an dich:
Belässt der read das \n im Datenstrom?
Woran erkennst du eigentlich, dass keine Daten mehr kommen? (Timeout,
leere Zeile, spezielles Datenwort, oder was?)
hallo Karl,
ich möchte gern mit einer Timeout festgestellt, dass keine Daten kommen.
wie ich das int der Funktion int PrintReceivedData in Kommentiert.
hallo karl,
mit deiner Grunfschleife kann ich zwar mehrere String auslesen, aber ich
muss
das Programm manuel abbrechen. Es geht nicht am Anfang des Programms
zurück, damit ich das nächste Kommando sende.
gast schrieb:
> hallo Karl,>> ich möchte gern mit einer Timeout festgestellt, dass keine Daten kommen.> wie ich das int der Funktion int PrintReceivedData in Kommentiert.
Woran erkennt man einen Timeout? Was liefert read in so einem Fall
zurück?
gast schrieb:
> hallo karl,>> mit deiner Grunfschleife kann ich zwar mehrere String auslesen, aber ich> muss> das Programm manuel abbrechen. Es geht nicht am Anfang des Programms> zurück, damit ich das nächste Kommando sende.
Dann wirst du das dann wohl in eine Schleife packen müssen
gast schrieb:
> hallo Karl,>> ich bin nicht sicher aber ich denke, dass read in diesem Fall ein Null> liefert. D.h res=0
Dann solltest du das erst mal abklären.
Testprogramm machen, in dem du dir den Returnwert von read ausgeben
lässt. Und dann wartest du erst mal
hallo Karl,
wenn ich keine Daten Empfange, res wird nicht angezeigt(kein printf),
int PrintReceivedData (void)
{
while ( res = read( fd, buf, sizeof(buf) ) ) {
buf[res] = '\0';
printf("%i\n",res);
//if (buf[res]==0)
if (res==0)
{
printf("res:%i\n",res);
}
printf( buf );
}
}