Error al leer datos función read

Iniciado por jose94, 3 Agosto 2017, 16:05 PM

0 Miembros y 2 Visitantes están viendo este tema.

jose94

Buenas,

Estoy intentando mostrar por pantalla los mensajes recibidos por parte de arduino mediante puerto serie. Para ello he configurado el puerto serie de la siguiente forma:



// Open the port in read-write mode
m_portHandler = open(pDev, O_RDWR | O_NOCTTY);
if(m_portHandler < 0)
return;

// Get the port attributes and flush all data on queues
tcgetattr(m_portHandler, &my_termios);
tcflush(m_portHandler, TCIOFLUSH);

// Setup the communication
my_termios.c_iflag &= ~(BRKINT | IGNPAR | PARMRK | INPCK |ISTRIP | IXON | INLCR | IGNCR | ICRNL);
my_termios.c_iflag |= IGNBRK | IXOFF;
my_termios.c_oflag &= ~(OPOST);
my_termios.c_cflag |= CLOCAL | CREAD;
my_termios.c_cflag &= ~PARENB;
my_termios.c_cflag |= CS8;
my_termios.c_cflag &= ~CSTOPB;
my_termios.c_cflag &= ~CRTSCTS;   
my_termios.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL | ICANON | NOFLSH | TOSTOP | ISIG | IEXTEN);
my_termios.c_cc[VMIN]=1; //Each simple read call will be blocked until recive at least one byte
my_termios.c_cc[VTIME]=0; //No timeout for reading
cfsetispeed(&my_termios, B115200);
cfsetospeed(&my_termios, B115200);
tcsetattr(m_portHandler, TCSANOW, &my_termios);


Y he usado la siguiente función para leer los datos recibidos en el puerto serie e imprimirlos por pantalla:

void lee()
{
char c;
read(m_portHandler,&c,1);
fprintf(stdout,"%x",uint8_t(c));

        }


Los datos se imprimen por pantalla pero al parecer lo imprime por bloques. Aunque la función read está configurara para que lea de byte en byte, hasta que no tiene un bloque completo no imprime nada. Por tanto, los últimos datos de información no se imprimen.
He probado a añadir más datos para completar el bloque y en ese caso si se imprimen.
No sé como solucionarlo, ¿alguna idea?.

Gracias :)

ivancea96

Prueba a llamar a fflush después del fprintf.
Código (cpp) [Seleccionar]
fflush(stdout);
Con ello, fuerzas a que envíe el buffer.

jose94

#2
Muchas gracias :)
¿Como puedo escribir datos binarios en un fichero jpeg?

ivancea96

Suponiendo que uses C:

Si es un archivo creado con fopen, entonces tienes fwrite (http://www.cplusplus.com/reference/cstdio/fwrite/)

Si no, especifica más el contexto :o

jose94