[pso] nesincronizare in test?

Cristian Zamfir pso@cursuri.cs.pub.ro
Sun, 18 Apr 2004 18:47:25 +0300


S-ar putea sa gresesc, dar as vrea sa pun in vedere urmatoarea situatie din 
test.c:
Daca trimit pe com1 si fac flush pe com1, apoi imediat fac clear pe com2, este 
posibil ca sa fac clear inainte ca ultima interupere de receive data 
available pe com2 sa se apeleze, mai ales la viteze mici ale serialei.

Astfel, se va face clear pe com2, apoi va ajunge un ultim byte, se va apela 
interuperea, si a aparut un byte in plus, care o sa fie considerat ca la 
urmatoarea citire.

Eu nu folosesc fifo si la viteze mici imi da data check failed, iar la viteze 
mari e ok.

Daca pun un sleep(1) ca mai jos,  in functia test_group, merg toate testele.

test("write COM1", do_write(com1, wb, NR) == 0);
test("flush COM1", ioctl(com1, UART16550_IOCTL_FLUSH_OUT) == 0);
sleep(1);
test("clear COM2", ioctl(com2, UART16550_IOCTL_CLEAR_IN) == 0);
for (i = 0; i < NR; i++)
	   wb[i] = rand () % 256;
test ("write COM1", do_write (com1, wb, NR) == 0);
test ("read COM2", do_read (com2, rb, NR) == 0);

Mi mi se pare ca nimic nu garanteaza ca interuperea de receive data available 
se declanjeaza inainte sa returneze clear, asa ca cu sleep ar fi o buna 
aproximare.

Spun prostii?