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 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Bertrand Lenoir-Welter
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.
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.
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.