Estimados a todos, escribí un programa para verificar el puerto serie que recibe datos en Linux. Este es un bucle infinito de READ. Descubrí que el puerto serie necesita múltiples READ.
Por ejemplo, el puerto serie quiere enviarte 0x62, 0x77, luego envía 0x62 primero y luego 0x77, si lees() inmediatamente después de que envía 0x62, entonces solo obtienes 0x62 y 0x77. debe ser leído nuevamente.
Si quieres leerlo todo de una vez, hay dos formas.
1: Escriba su propia función para leer el puerto serie y llame a read
Por ejemplo
int tipc_read_socket( int sockfd, char *buf, int len; )
{
int count = 0; //El número de bytes leídos al mismo tiempo
int pos = 0 //total; *** número de bytes leídos
pos = 0
do {
count = read(sockfd, amp; buf[pos], len - pos );
//printf("tipc_read_socket: count[d]\n", count);
if(0 gt; count)
{
if( EINTR == errno )
continue
// Cuando se establece en sin bloqueo, la primera lectura Después de todo los datos.
return( pos );
}
if( 0 == cuenta ) break /* ¡No queda nada! return( pos }
2: Establece propiedades de entrada y salida.
struct termios newtio;
bzero( amp; newtio, sizeof( newtio )
newtio.c_cc[VTIME] = ***; p>
p>
newtio.c_cc[VMIN] = ***;
tcsetattr(fd, TCSANOW, amp; newtio);
VTIME y VMIN aquí; se leen los tiempos de espera.
Después de configurar, por ejemplo, si se lee 0x62 durante la lectura, esperará el tiempo que usted establezca. Si se lee 0x77 dentro de este tiempo, le devolverá 0x62 y 0x77 juntos. Este tiempo depende de la velocidad en baudios y debe establecerse en el tiempo máximo entre dos bytes consecutivos a una determinada velocidad en baudios.