IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Gestion de QSerialPort


Sujet :

Qt

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2018
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2018
    Messages : 124
    Points : 55
    Points
    55
    Par défaut Gestion de QSerialPort
    Bonjour à tous,

    je suis en train de m'amuser avec le QSerialPort, et je remarque certaines choses que je ne comprends pas.
    Le contexte, je reçois des données sur ma ligne série, que j'enregistre dans un fichier.
    J'utilise la fonction "read", et la première question qui vient est, pourquoi devoir rentrer le nombre d'octets lus:
    serial.read(dataSerial, 10);
    Que se passe-t-il si le nombre d'octet envoyé est inférieur ou supérieur à 10 pour notre exemple ?
    Il y a-t-il un timeout, en gros comment ça marche ?

    Autre point, je suis dans un boucle infinie ou les données lues sont directement enregistrées dans un fichier, et je me suis aperçu de la chose suivante:
    Si je mets serial.read(dataSerial, 1000); j'ai presque toutes les données d'enregistrées (mais pas tout, manque les dernières données envoyées)
    Si je mets serial.read(dataSerial, 50); je n'ai environ que la moitié des données envoyées (il manque la moitié des données finales).

    Pourquoi ? parce que même si les données ne sont plus envoyées sur la ligne série, le programme tourne toujours et devrait enregistrer les dernières.

    Ou ma méthode n'est pas bonne et il faut que je fasse différemment.

    Merci de m'avoir lu

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Le read() accepte une taille afin de ne pas faire de dépassement de tampon avec le tampon qui reçoit des données (si vous lisez 1000 octets alors que votre tampon ne fait que 500 octets, cela risque de très mal se passer (et ce serait une faille de sécurité)).

    La taille spécifiée est une taille de données lues maximale (lira au maximum N données). La fonction ne bloque pas, même s'il n'y a rien à lire. Pour bloquer, vous avez waitForReadyRead() (avec un paramètre de timeout).

    Dans la documentation, on retrouve un exemple d'une boucle permettant de lire les données disponibles.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2018
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2018
    Messages : 124
    Points : 55
    Points
    55
    Par défaut
    Merci LittleWhite pour la réponse, mais j'ai compris que cétait le nombre de données lues et souhaitées au maximum, mais ma question est, comment et/ou à partir de quand la fonction "read" estime qu'il n'y a plus de données à recevoir ?

    Autre question, pourquoi si je mets une lecture de 50 octets, je n'aurai que la moitié des données lues que si j'avais mis 1000 ? (pour mieux comprendre voir ma question initiale)

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/08/2002, 21h37
  2. Gestion de matrice
    Par bzd dans le forum C
    Réponses: 4
    Dernier message: 12/08/2002, 18h19
  3. Réponses: 4
    Dernier message: 04/07/2002, 12h31
  4. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11
  5. gestion d'un joystick ...
    Par Anonymous dans le forum DirectX
    Réponses: 1
    Dernier message: 23/05/2002, 12h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo