Problème gestion port serie

Signaler
Messages postés
1
Date d'inscription
dimanche 8 février 2004
Statut
Membre
Dernière intervention
24 juin 2004
-
Messages postés
3
Date d'inscription
samedi 11 mars 2006
Statut
Membre
Dernière intervention
9 avril 2006
-
Bonjour, j'aimerai savoir comment faire pour géré le port série sous windows NT avec Builder ou VC++ sans avoir a utiliser les commandes API de windows car je veux traité la réception d'un octet dès qu'il est reçu sur le port sans attendre la suite des octets qui arrivent, je ne veu surtout pas utiliser de Buffer pour lire les octets. Mon but est de faire la transmission des caractères recus sur le port série sur réseau ethernet(100 MBits) pour le retransmettre sur le port série d'un poste distant et vice versa donc il faut que je commence a traité les infos recu sur le port série. Est-t-il possible de traité a bas niveau le port série sous Windows NT? J'ai déjà fais un programme utilisant les méthode CreateFile(), SetComm.... avec gestion de thread mais j'ai des problèmes de timing, la liaison est de type 9600 bauds 8 bits avec parité, le problème est que windows s'occupe de mettre plusieurs octet dans un buffer interne ce qui me bloque. Quelqu'un connait t il une solution pour avoir un évenement de reception que d'un seul octet ou de pouvoir réduire le buffer interne de l'API de reception a un seul octet? Merci beaucoup d'avance.

seb (chfauve59)

9 réponses

Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,

et ça, ça marche pas ?

BOOL SetupComm(
HANDLE hFile, // handle of communications device
DWORD dwInQueue, // size of input buffer
DWORD dwOutQueue // size of output buffer
);

@++
Messages postés
590
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
18 septembre 2021
3
Bonjour,
Je vois la meme question depuis bientot un mois.
Si le probleme est vraiment si pointu,il faut en passer par la gestion du port série par interruptions.Sous windows seul un vxd est capable de faire ça.Un programme normal se heurte au niveau de privilege requis pour installer une interruption.
Il faut télécharger le DDK,nécessaire a faire des drivers.
Le ddk utilise ml (masm32) comme langage.
Un exemple tout fait existe sur internet ,je l'ai vu mais je ne me rappelle plus trop ou.
Sur mon site ,a la page de lien , se rendre sur le site des auteurs de msdn,un des auteurs est spécialisé la dedans.
Avec un peu de chance ,un de ses articles fournira le source et des explications.
C'est le vxd type peu difficile à réaliser.
Une fois le vxd installé,c'est lui qui a la priorité .

ToutEnMasm
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,

ToutEnMasm, je crois que tu n'as pas bien lu la question:
Bonjour, j'aimerai savoir comment faire pour géré le port série sous windows NT avec Builder ou VC++

kidi NT dit pas de vxd, les drivers c bien mais c pas le + portable. ( de +, j'ai fournis un exemple pour hooker le port COM par driver vxd sur ce site, le hook est une bonne solution car cela permet de charger le driver en dynamique )

@++
Messages postés
590
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
18 septembre 2021
3
Salut,
j'ai bien lu la question.je cite

"Quelqu'un connait t il une solution pour avoir un évenement de reception que d'un seul octet ou de pouvoir réduire le buffer interne de l'API de reception a un seul octet? "

Et la réponse c'est le vxd qui la fournit avec une éventuelle création de message windows.
Le vxd permet de créer une interruption par pic pour chaque octet reçus et de les mettre dans un tampon dimensionnable a volonté.
Le vxd remplace l'API.
A mon avis , tu ne vois pas trop comment gérer un port série.
Se renseigner sur l'uart , l'usb.
ToutEnMasm
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
re,

je ne rentrerais pas dans ton débat car il ne m'interesse pas étant donné que nous ne parlons pas de la meme phrase.

alors demande a d'autres ...
pas de vxd dans un noyau NT, je confirme...

@++
Messages postés
590
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
18 septembre 2021
3
Salut,
Pour avoir des réponses dans un groupe de discussion il faut savoir poser les bonnes questions.
Je ne demande rien du tout.
Tout cela m'a l'air fort confus.
a+
ToutEnMasm
Messages postés
1
Date d'inscription
mardi 7 novembre 2000
Statut
Membre
Dernière intervention
31 janvier 2005

moi auussi j'ai le même probleme et j'(aimes bien une reponse le plus vite possibles
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
re,

le problème dans la gestion du port serie est la désynchronisation des évènements entre le driver et l'application.

les messages sont attendus par les fonctions Wait???.

il y a 2 mode de programmation:
le mode bloquant et le mode overlapped.
en mode bloquant, il est possible d'augmenter la priorité du thread qui répond aux evenements.
en mode overlap, la gestion est plus simple et non bloquante mais moins portable avec d'autres systemes d'exploitation.

dans le cas d'une gestion octet par octet, je pense qu'il faut faire une gestion bloquante en augmentant la priorité du thread ( coté applicatif ) qui gère les entrées COM.

si tu utilise le mode overlap, il faut creer une boucle de lecture octet / octet. ( en cas de reception de plusieurs octets )
sur le site de msdn, il y a un article interressant sur le port serie qui explique tout ça, j'ai plus la page en tete.

@++
Messages postés
3
Date d'inscription
samedi 11 mars 2006
Statut
Membre
Dernière intervention
9 avril 2006

peut être pourrai tu utiliser le port com a bas niveau, je sait pas vraiment comment tu peut le faire sur le PC, mais pour la calculatrice graphique TI89 en langage C,j'utilisais peekIO(0x60000E) pour lire l'état du port et pokeIO(60000E,...) pour ecrire.
ce n'est pas sur que ce soit la meme fonction pour un PC

donc je serai aussi intéréssé de savoir comment untiliser le port com a bas niveau (fair directement varier les état logiques sur les broches)...