Ciao a tutti,
sto riprendendo in mano l'applicazone, di cui già scrissi tempo fa, che permette la comunicazione con la porta seriale.
Ora sto cercando di implementare un applicazione asincrona (overlapped), ovvero vorrei che leggesse dalla seriale solo quando arriva un carattere nel buffer della USART. Ho scritto il codice che riesce a soddisfare questo obiettivo, premetto che è la prima volta che sbatto la testa con le strutture Overlapped.
Codice PHP:
while(1)
{
if ( !WaitCommEvent(Porta_Seriale, &buffer, &OverlapStruct))
{
if(GetLastError()== ERROR_IO_PENDING);
printf("I/O pending...");
}
if(WaitForSingleObject(OverlapStruct.hEvent,INFINITE)==WAIT_OBJECT_0)
{
do
{
ReadFile( Porta_Seriale,&car,sizeof(car),&BytesRead,&OverlapStruct);
printf("%c",car);
Sleep(2);
}while (BytesRead > 0 );
}
ResetEvent(OverlapStruct.hEvent);
}
Il codice è stato testato inviando dei dati da microcontrollore ed effettivamente, ogni volta che il micro trasmetteva, il programma stampava a video la stringa corretta.
Il mio problema nasce dal fatto che io vorrei anche scrivere sulla seriale, ma non saprei come fare. Devo forse creare un thread che si occupi dell'ascolto della porta, mentre il programma principale si occupa dell invio dei dati sulla stessa porta? Ci può essere una soluzione alternativa all uso dei thread (argomento per ora da me mai trattato)?.
Qualcuno saprebbe darmi una traccia del percorso da seguire?
Grazie a tutti per l attenzione.
Saluti!