kann nicht alle Zeichen seriell lesen
-
hallo,
mit folgenden Konstrukt lese ich in einem thread vom seriellen port, das klappt auch soweit ganz gut, jedoch das er ab bestimmten telegrammgrössen ein einzelnes zeichen aus der mitte des telegramms "verschluckt".
//Thread .h #define BUFSIZE 251 unsigned char Buffer[BUFSIZE]; // Thread .cpp int n2bytes; int nbytes; /* nbytes read */ char *bufptr; /* Current char in buffer */ //While the thread is not terminated fcntl( fd, F_SETFL, FNDELAY); while (!Terminated) { Sleep(100); //Initialize the buffer Buffer[0] ='\0'; nbytes=0; n2bytes=0; //Start a pending read operation bufptr = Buffer; while ((nbytes = read(fd, bufptr, Buffer + sizeof(Buffer) - bufptr -1 ) ) > 0) { n2bytes=n2bytes + nbytes; bufptr += nbytes; GBytes=n2bytes; /* Abbruch-Bedingung: telegramm 0x10-Beginnend und fuenf zeichen lang oder 0x68-beginnend plus n-zeichen lang und endet mit 0x16 */ if ( ((Buffer[0]==0x10) && (n2bytes == 5)) ) { break; } else if((Buffer[0]==0x68) && (Buffer[StrToInt(Buffer[2])+5] == 0x16)) { break; } //falls mehr als 80zeichen bisher gelesen wurden abbrechen else if(n2bytes > 80) break; } *bufptr='\0'; // TEST if(nbytes > 4){ frmMain->AddTelegrammData("!in: " +AnsiString( nbytes) + " Bytes empfangen" ,true ); //If there is some data in the buffer ...Habt ihr eine idee, wo ich meinen fehler gemacht habe?
Gruss xFoRce