Nb de caracteres dans le buffer liaison série?? [C] - C - Programmation
Marsh Posté le 08-06-2005 à 20:28:18
bonjour
g souvent manipule la liaison serie en c / c++ et c#
en c je receptionnais les valeurs dans un tableau dont je determine la taille selon ce que j'attendais en retour
vince
Marsh Posté le 09-06-2005 à 09:51:01
Ben oui mais si je cherche a faire ca c'est que mon programme ne fonctionne pas je lis le nombre de caracteres que je devrais avoir mais il en reste encore apres ce qui n'est pas normal et je voulais donc effectuer un test avant chaque lecture pour savoir si le nb de caracteres attendus est bien le meme que le nb present dans le buffer.
Marsh Posté le 09-06-2005 à 14:11:49
J'ai une petite question qui pourrait m'éclairer sur ce pb:
Ou va t'on lire lorsque l'on effectue un readfile dans la liaison série??
Marsh Posté le 09-06-2005 à 16:50:10
crazyclimber a écrit : J'ai une petite question qui pourrait m'éclairer sur ce pb: |
Dans un buffer de réception...
Marsh Posté le 09-06-2005 à 17:42:12
bjr ,
effectiveemnt la fonction readfile prend en parametre un buffer qui recupere toutes les informations
moi je mettais un tableau de char pour recuperer tt ca et ca marche
regarde de plus pres le prototype de cette fonction
et apres mets un pt d'arret sur l'appel a cette fonction et un espion sur ton tableau de char
vince
Marsh Posté le 15-06-2005 à 09:56:56
ReadFile(hComm,&tabres,1,&nboctetlu,NULL);
Ici je donne le nombre de caracteres a lire (1) donc il faut bien que je le connaisse avant!!!!enfin pour ce que je veux faire!
Je ne peux pas faire comme tu dis winzo car si je mets un grand nombre le read se bloque en attnedant de lire la totalité des caracteres demandés.
Marsh Posté le 15-06-2005 à 11:03:21
crazyclimber a écrit : ReadFile(hComm,&tabres,1,&nboctetlu,NULL); |
C'est pas le nombre de caractères à lire, mais la taille du buffer de reception. ReadFile fera ce qu'il peut dans la limite de la taille disponible. Le nombre réel de caractères placés dans le buffer est mis dans nboctetlu par la fonction.
|
après, si nboctetlu vaut 0, on a rien lu.
si il vaut 123, on a lu 123 char et ils sont dans tabres.
C'est une fonction de reception des plus classiques.
Si tu dois recevoir des chaines de caractères, je conseille ceci:
|
Il faut lire les docs. Si tu as du mal avec l'anglais, je te conseille de prendre des cours d'urgence. Il est indispensable dans ce métier de savoir lire l'anglais technique (c'est pas difficile, et en France, l'anglais est obligatoire, donc, pas d'excuse pour les bases, à part une capillarité palmaire aigüe ...).
Marsh Posté le 16-06-2005 à 09:57:17
IFilesystem::ReadFile
Prototype
void IFilesystem::ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD NumberOfBytesToRead, DWORD& NumberOfBytesRead) const;
Description
This function reads data from a file. Note that due to implementation issues, in the current version of rfstool, the whole file is read to memory first.
Input
HANDLE hFile - Filehandle previously allocated by IFilesystem::OpenFile
LPVOID lpBuffer - Pointer to a BYTE buffer to receive the file data
DWORD NumberOfBytesToRead - Size of the Buffer pointed to by lpBuffer
DWORD& NumberOfBytesRead - Reference to a DWORD that will receive the number of bytes actually retrieved. This might be less than NumberOfBytesToRead, indicating end-of-file.
Output
None
Je veux bien que ce soit la taille du buffer de reception c'est ecrit mais alors faut que les gars qui ecrivent les docs soient logiques parce que jusqu'à preuve du contraire
"NumberOfBytesToRead" ca veut dire nombre de caracteres a lire!!!!!
C'est pas avec l'anglais que j'ai un pb c'est avce le C!!!
Marsh Posté le 16-06-2005 à 10:29:28
A moins que ce soit toi qui ait un problème avec l'anglais....
Parce que sur tous les tutoriels sur la liaison série c'est explicitement écrit "nb de caracteres a lire" et non taille du buffer!
Si j'augmente ce nombre le read se bloque car il attend le nb de caracteres demandés et ils n'arrivent jamais!!!
En tout cas je connais peu de monde sur les forums qui comme toi on du mal à se remettre en question et a respecter les debutants!!Un peu de compassion, tu devrais prendre exemple sur d'autres sites "www.siteduzero.com"
Sur ce, bon apprentissage de l'anglais!!!
Marsh Posté le 16-06-2005 à 11:43:33
crazyclimber a écrit : A moins que ce soit toi qui ait un problème avec l'anglais.... |
C'est possible.
Citation : Parce que sur tous les tutoriels sur la liaison série c'est explicitement écrit "nb de caracteres a lire" et non taille du buffer! |
L'important est le commentaire et non le nom plus ou moins fantaisiste et confusant du paramètre
Citation : DWORD NumberOfBytesToRead - Size of the Buffer pointed to by lpBuffer |
"Size of the Buffer pointed to by lpBuffer" signifie "Taille du tampon pointé par lpBuffer"
Moi, j'essaye de t'aider. Maintenant, tu peux essayer de faire le mariole, ça ne m'interesse pas.
Marsh Posté le 16-06-2005 à 14:54:38
Le commentaire est dans beaucoup de cas: nBytesToRead -> nb de caracteres a lire.
Mais sans vouloir polémiquer, si je suis ta méthode et que je donne un buffer de 50
char *tabres=new char[50];
ReadFile(hComm,&tabres,50,&nboctetlu);
je devrais avoir une case de mon tableau remplie( si je lis un seul caractere bien entendu) par le read apres la fin de l'instruction.
Or lorsque j'essaye, le Read bloque, c'est à dire qu'il attend de lire les suivantes mais il n'y en a pas donc il reste bloqué!!
Ou est donc la solution???
Marsh Posté le 16-06-2005 à 15:47:57
crazyclimber a écrit : Le commentaire est dans beaucoup de cas: nBytesToRead -> nb de caracteres a lire. |
C'est parce que le ReafFile() est blocant. On peut effectivement savoir ce qu'il y a à lire avant avec ClearComm().
|
avec
|
Marsh Posté le 17-06-2005 à 11:59:13
Ben voilà, c'est tout ce que je demandais, c'éytait pas la peine de me prendre pour un gland des le départ!!!
Allez merci et sans rancune.
Marsh Posté le 08-06-2005 à 17:12:42
Bonjour,
J'aimerais savoir s'il est possible de connaitre le nombre de caractere a lire dans le buffer de reception d'une liaison serie, pour etre sur apres de lire le bon nombre??
Si oui, comment faut t'il faire, ya t'il des fonctions deja faites ou une instruction particuliere.Je sais qu'elle existe en VB (InBufferCount qui renvoie comme entier le nombre de caracteres a lire)
Ou, si l'on est obligé d'aller voir directement dans le registre contenant le buffer de reception, comment y accede t'on??
Merci