elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Error al leer datos función read
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error al leer datos función read  (Leído 246 veces)
jose94

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Error al leer datos función read
« en: 3 Agosto 2017, 16:05 »

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:

Código:

// 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:
Código:
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 :)


En línea

ivancea96


Conectado Conectado

Mensajes: 3.114


ASMático


Ver Perfil WWW
Re: Error al leer datos función read
« Respuesta #1 en: 3 Agosto 2017, 16:30 »

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


En línea

jose94

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Error al leer datos función read
« Respuesta #2 en: 3 Agosto 2017, 18:08 »

Muchas gracias :)
¿Como puedo escribir datos binarios en un fichero jpeg?
« Última modificación: 3 Agosto 2017, 18:16 por jose94 » En línea

ivancea96


Conectado Conectado

Mensajes: 3.114


ASMático


Ver Perfil WWW
Re: Error al leer datos función read
« Respuesta #3 en: 3 Agosto 2017, 18:14 »

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
En línea

jose94

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Error al leer datos función read
« Respuesta #4 en: 3 Agosto 2017, 20:13 »

Gracias de nuevo :P
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines