Red de conocimiento informático - Problemas con los teléfonos móviles - Programación del puerto serie de Termios

Programación del puerto serie de Termios

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

Por ejemplo, el puerto serie te dará 0x62 y 0x77. Luego envía primero 0x62 y luego 0x77. Y si lees() inmediatamente después de que envíe 0x62, solo obtendrás 0x62. y leerá 0x77 nuevamente.

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

1: Escriba una 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; //Número de bytes leídos al mismo tiempo

int pos = 0 //Total * * * palabras leídas; Número de secciones

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)

Continuar;

//Cuando se establece en sin bloqueo, 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 = contar;

} while(len gt; pos);

Return(pos);}

2 : establece las propiedades de entrada y salida.

struct termios newtio

bzero( amp; newtio, sizeof(new TiO));

new TiO . ;

nuevo TiO . c _ cc[VMIN]= * * *;

tcsetattr(fd,TCS anow & nuevo TiO);

donde VTIME VMIN . es el tiempo de espera de lectura.

Después de configurar, por ejemplo, si lees 0x62, esperará el tiempo que establezcas. Si 0x77 llega dentro de este tiempo, le devolverá 0x62 y 0x77. 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.