[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?