On Wed, 18 Jan 2006 17:08:34 -0500, Joe Mammone <hw@qnx.com> wrote:
I’ve done some testing on my side and have verified that only 1 byte is
ever in the drivers output buffer at any given time…
I also have done some isolated testing:
I start the driver like this:
slay devc-ser8250
devc-ser8250 -F -O4 3f8,4 &
sleep 2
stty baud=50 par=even bits=8 stopb=2 </dev/ser1
Following test app I compile by simply “cc sertest.c”
and run “./a.out>out.txt”
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main( void )
{
int fd;
int i;
struct timespec before, after;
double db, da;
fd = open( “/dev/ser1”, O_WRONLY);
for( i=0; i<30; i++)
{
clock_gettime( CLOCK_REALTIME, &before );
write( fd, “x”, 1);
clock_gettime( CLOCK_REALTIME, &after );
db = (double)before.tv_sec +
(double)before.tv_nsec/1000000000;
da = (double)after.tv_sec +
(double)after.tv_nsec/1000000000;
printf(“write nr %d blocked for %f sec.\n”, i,da-db);
}
return( EXIT_SUCCESS );
}
And this is the output:
write nr 0 blocked for 0.001000 sec.
write nr 1 blocked for 0.000000 sec.
write nr 2 blocked for 0.000000 sec.
write nr 3 blocked for 0.000000 sec.
write nr 4 blocked for 0.000000 sec.
write nr 5 blocked for 0.751885 sec.
write nr 6 blocked for 0.000000 sec.
write nr 7 blocked for 0.000000 sec.
write nr 8 blocked for 0.000000 sec.
write nr 9 blocked for 0.958853 sec.
write nr 10 blocked for 0.000000 sec.
write nr 11 blocked for 0.000000 sec.
write nr 12 blocked for 0.000000 sec.
write nr 13 blocked for 0.957853 sec.
write nr 14 blocked for 0.000000 sec.
write nr 15 blocked for 0.000000 sec.
write nr 16 blocked for 0.000000 sec.
write nr 17 blocked for 0.957854 sec.
write nr 18 blocked for 0.000000 sec.
write nr 19 blocked for 0.000000 sec.
write nr 20 blocked for 0.000000 sec.
write nr 21 blocked for 0.957853 sec.
write nr 22 blocked for 0.000000 sec.
write nr 23 blocked for 0.000000 sec.
write nr 24 blocked for 0.000000 sec.
write nr 25 blocked for 0.957853 sec.
write nr 26 blocked for 0.000000 sec.
write nr 27 blocked for 0.001000 sec.
write nr 28 blocked for 0.000000 sec.
write nr 29 blocked for 0.956854 sec.
From this I can see, that despite writing only one byte at a time
initially only fifth write blocks, and later only every fourth. Output
buffer size is, as above -O4 shows, 4. With baud 50 every one write
should have blocked for about 0.25 sec, not every fourth for 1 sec.
OS is QNX 6.3 SP1 and the driver is
/sbin/devc-ser8250 37,096 bytes from Apr-30-2004.
Could perhaps somebody else interested repeat my test and confirm/deny
my results?
bobik: bobik atsign os dot pl