La Red de Conocimientos Pedagógicos - Aprendizaje de japonés - Queridos héroes, escribí un programa en Linux para verificar el puerto serie que recibe datos. Es un bucle de lectura infinito. Descubrí que el puerto serie debe leerse varias veces.

Queridos héroes, escribí un programa en Linux para verificar el puerto serie que recibe datos. Es un bucle de lectura infinito. Descubrí que el puerto serie debe leerse varias veces.

En primer lugar, el método de almacenamiento en caché de archivos del puerto serie predeterminado es sin almacenamiento en búfer. En segundo lugar, el puerto serie no es continuo al enviar datos.

Por ejemplo, el puerto serie debería darte 0x62, 0x77. Luego enviará primero 0x62 y luego 0x77. Y si lee() inmediatamente después de que envíe 0x62, solo obtendrá 0x62 y será necesario volver a leer 0x77.

Si quieres leerlo todo de una vez, hay dos formas.

1: escriba una función para leer el puerto serie usted mismo y llame a leer en él.

Por ejemplo:

int tipc_read_socket( int sockfd, char *; buf, int len ​​)

{

int count = 0; //Número de bytes leídos cada vez

int pos = 0 //Total ** * lee Número de bytes

pos = 0;

do {

count = read(sockfd, &buf[pos], len - pos);

//printf("tipc_read_socket:count[%d]\n", count);

if( 0 > count )

{

if( EINTR == errno )

continuar;

//Cuando se establece en no bloque, después de leer todos los datos por primera vez, el resultado por segunda vez es -1.

return( pos );

}

if( 0 == cuenta ) break /* ¡No queda nada */

pos += count;

} while( len > pos );

return( pos );}

2: Configuras la entrada Salida atributos.

struct termios newtio;

bzero( &newtio, sizeof( newtio )

newtio.c_cc[VTIME] = ***;

newtio.c_cc[VMIN] = ***;

tcsetattr(fd,TCSANOW,&newtio);

El VTIME y VMIN en esto. Es el momento de esperar la lectura.

Después de configurar, por ejemplo, cuando lea 0x62, esperará el tiempo que establezca. Si 0x77 llega durante este tiempo, le devolverá 0x62 y 0x77 juntos. Este tiempo está relacionado con la velocidad en baudios y debe establecerse en el intervalo máximo entre dos bytes consecutivos a una determinada velocidad en baudios.