Programmation du port série

Le
Rémy
Bonjour,

Je développe une appli en C s'appuyant sur un port de communication, en
l'occurrence un port "série" USB, avec les API Windows CreateFile, WriteFile
et ReadFile, en ayant pris soin de déclarer une structure Overlapped au
moment de l'ouverture

J'ai besoin d'échanger en mode soutenu des trames de 1 à 2 octets avec un
équipement particulier, a 115200 bds. Mes fonctions tournent correctement,
sauf que je butte sur un problème agaçant, à savoir qu'entre deux appels à
WriteFile, ainsi que lecture entre les deux, j'ai une latence de 500 ms,
alors que ma fonction interroge en permanence.

Y'a t'il un mécanisme particulier dans les API Windows imposant cette
constante ?

Merci si vous avez une piste :o)

rémy
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Bertrand Lenoir-Welter
Le #22907411
Bonjour

500 ms, ce n'est pas normal. Visiblement, ça tombe sous le coup d'un
timeout d'écriture, qui se règle avec SetCommTimeouts(). Ca envoie bien,
au moins ? Vérifie ton protocole (structure DCB) pour voir s'il n'y a
pas un contrôle de flux en trop.

En lecture, le mieux est d'utiliser d'abord ClearCommError() pour savoir
s'il y a du monde dans le buffer de réception. Ca évite de tomber dans
le timeout de ReadFile(). Pas très important en overlapped, mais c'est
quand même plus propre.
Publicité
Poster une réponse
Anonyme