/ / Communication de port série, problème avec write () - c, port série

Communication de port série, problème avec write () - c, port série

J'ai écrit un programme en C sur une machine Linux qui lit et écrit sur un port série. Il est connecté à une machine Windows XP exécutant un émulateur qui envoie les données de mon programme.

Dans mon programme, j'ai 2 discussions, une pour lirel’entrée du port série et son traitement. Et un thread qui se connecte à un socket de serveur et écoute les données traitées puis écrites sur le port série. Ces deux threads bouclent continuellement pendant l'exécution.

Le problème que je rencontre est avec la commande write.

 void writeToPort(unsigned char* buf, int length)
{
int w = 0;
if(fd > 0)
w = write(fd, buf, length);

printf("wrote %d bytesn", w);
}

et j'ouvre le port comme ça

fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);

Il fonctionne pendant les premières secondescorrectement. "J'ai vérifié dans l'hyperterminal sous Windows que les octets auxquels je m'attendais sont correctement envoyés. Cependant, à un moment donné, l'appel write () sera bloqué. L'autre thread de lecture d'entrée continue et la lecture à partir du port série fonctionne correctement.

Est-ce que quelqu'un sait pourquoi cela pourrait se produire? J’ai essayé d’utiliser des mutex chaque fois qu’une lecture ou une écriture est effectuée sur fd, mais cela ne semble pas faire la différence. Cela ne semble pas non plus avoir d’importance si l’autre thread est en cours d’exécution / lit à partir du port. Tous les conseils ou suggestions sont les bienvenus, merci

Réponses:

0 pour la réponse № 1

Si je devais aborder votre problème d'unDe haut niveau, je mettrais en œuvre un modèle de serveur de base fork, où le thread principal reste identique à votre conception (écoute pour une entrée via un port série). Une fois qu'il a reçu un nouveau message, créez un nouveau processus pour effectuer votre traitement, puis renvoyez la réponse en écho ...

Jeter un coup d'œil à Programmation réseau UNIX de Steven pour la bible de facto sur la programmation de socket Unix.