[ECOS] cyg_io_read
grahamlab
graham.labdon@cranems.co.uk
Mon Apr 20 12:01:00 GMT 2009
Hello all
I am having trouble understanding the operation of the cyg_io_read
operation.
I have a simple programto read the /dev/ser1 device on my stm3120e dev
board.
If i set blocking on read then my cyg_io_read call only returns when the
specified number of bytes has been received -
char msg[10]
cyg_uint32 msglen=10;
res = cyg_io_read(handle,msg,&msglen); // returns when 10 bytes have been
received.
However, I want to read bytes as they arrive. With this in mind I set the
device to operate in non blocking mode -
block = 0;
len = sizeof(cyg_uint32);
cyg_io_set_config(handle,CYG_IO_SET_CONFIG_SERIAL_READ_BLOCKING,&block,&len);
I set up my code to ignore EAGAIN errors on the read -
while(1)
{
char msg[10];
cyg_uint32 msglen=10;
res = cyg_io_read(handle,msg,&msglen);
if (res != -EAGAIN)
{
diag_printf ("read %d %d\n",res,msglen);
for (cyg_uint32 x = 0; x < msglen; ++x)
{
diag_printf("%c",msg[x]);
}
diag_printf("\n\n");
}
With this in place I expected to receive all bytes sent by the sending
program , BUT NO
I only receive the first 2 or three. If I send single characters I get these
but if I send anything more I dont get what I sent.
I would be grateful if someone could explain this behavior.
Thanks Graham
--
View this message in context: http://www.nabble.com/cyg_io_read-tp23134401p23134401.html
Sent from the Sourceware - ecos-discuss mailing list archive at Nabble.com.
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss
More information about the Ecos-discuss
mailing list