E' un processo un po complicato cerco di essere chiaro.

Ho in mano un software che come attività principale ha il richiamo a questa funzione lavoro() tramite un timer impostato a 60ms.
Questa funzione in prims valuta lo stato logico di alcune uscite di una scheda proprietaria pci national.
In base allo stato deve compiere determinate operazioni.

In passato alcune di queste uscite digitali (uscite che la pci rendeva disponibili) avevano il compito di leggere in realtime lo stato di una rigaottica.
Adesso non esiste più il dispositivo che permette di collegare la riga ottica alla scheda pci proprietaria e devo collegare sta cosa tramite usb, virtualizzandola come com.

In gioco ci sono 6 cicli timer, ognuno dei quali monitora un componente (sempre tramite le porte digitali o analogiche del scheda proprietaria pci).

Ad un certo punto il software ora deve richiedere il dato della rigaottica e al fine di ottenere il dato devo mandargli un carattare ch(2), ma devo attendere almeno 20ms al fine di ottenere il dato.

Il problema è che il primo dato lo ottengo coerente, gli altri no(come se il dato richiesto fosse troppo alto e la riga ottica si fosse spostata di più rispetto a quello teorico).

Ho infatti pensato che il problema potrebbe essere dovuto allo sleep che blocca l'esecuzione degli altri cicli timer e che il dato lo andassi a richiedere troppo tardi.

Solo per info ho anche un altro problema.
I cicli timer sono cosi veloci che vado a richiedere 6 volte il dato in modo troppo veloce e il dipositivo a volte si inchioda dandomi un bel avviso "Command read too fast"... uff.

Bhe almeno un passo avanti l'ho fatto...

Scusa lo sfogo