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

C++ Discussion :

flux binaires sur RS232


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Points : 148
    Points
    148
    Par défaut flux binaires sur RS232
    Salut,

    Je veux ecrire une fonction qui recupere un flux binaire en sortie de ReadFile sur RS232.
    J'ai un code fonctionnel mais limite a un flux de quatre octets car je stocke le retour de ma fonction dans un unsigned long int.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    typedef unsigned long int bin32;
    bin32 RS232::recep(int trame_size)
    {
        //char buffer[trame_size+1];
        bin32 buffer = 0;
        DWORD dw_octet_recus;
     
        bool result = ReadFile(h_com, &buffer, trame_size, &dw_octet_recus, NULL); //NULL pour le mode synchrone
     
        if(result == true){
            if (dw_octet_recus != 0){
                return buffer;
            }
        }else{
            cerr << "erreur sur la fonction de reception\n";
        }
        return 0;
    }
    Je voudrais etre capable de recupere un flux de longueur indeterminee. J'ai donc pense a plusieurs solutions :
    _ declarer un tableau d'unsigned char (il faut quand meme gerer sa dimension)
    _ utiliser une string (ca facilite l'extraction de donnees mais ca m'oblige a utiliser des "octets signes")
    _ creer un vector<unsigned char> (il faut implementer les fonctions d'extraction)

    Qu'elle est, selon vous, la meilleure solution ?

    Question subsidiaire : Est-ce que ca vaut la peine de recuperer plusieurs octets d'un coup a l'interieur de ReadFile, plutot que d'en recuperer un a la fois et de faire une boucle sur ReadFile ?

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Le type string de la stl cache un type générique : basic_string.

    string doit être déclaré comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef basic_string<char...> string;
    On peut tout à fait imaginer une string de caractères non signés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef basic_string<unsigned char> ustring;

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Points : 148
    Points
    148
    Par défaut
    Interessant,

    Le probleme c'est que le ustring demande des const unsigned char*. Donc, impossible de lui envoyer des valeurs hexa car le compilateur decrete que ce sont des entiers. Et je ne peux plus envoyer de chaines de caracteres car ce sont des const signed char*.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Tu peux toujours caster une valeur hexa en unsigned char, tu sais...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Points : 148
    Points
    148
    Par défaut
    Oui mais en const unsigned char* j'en doute.

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    En effet : Tu dois écrire tes entiers en hexa dans un buffer de unsigned char avant conversion...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Points : 148
    Points
    148
    Par défaut
    Donc, ca revient a utiliser un tableau de unsigned char.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Points : 148
    Points
    148
    Par défaut
    J'ai manque de vigilance. En regardant les prototypes de WriteFile et ReadFile, j'ai constate qu'ils demandaient un LPDWORD. Donc, un point un pointeur sur un long double, si je ne m'abuse.

    Donc, je n'ai pas besoin de gerer un flux de dimension "infinie" puisque je suis limite a 32 bits. Je vais simplement declarer un type unsigned long double pour stocker mes bits.

    Je ne deleste pas le sujet car la solution pour creer un flux binaire "infini" m'interesse quand meme.

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Non, un pointeur sur unsigned long.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. lecture binaire sur un flux
    Par zais_ethael dans le forum C++
    Réponses: 9
    Dernier message: 29/08/2006, 01h11
  2. [VB6] Communication binaire sur port RS232
    Par Oseval dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 12/04/2006, 12h53
  3. A quand un flux RSS sur les news?
    Par Invité dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 08/12/2005, 22h47
  4. Mémoire sur RS232 ?
    Par FredG dans le forum Composants
    Réponses: 2
    Dernier message: 17/11/2005, 15h27
  5. Recuperation de flux RSS sur un site
    Par Merkutio dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 17/08/2005, 21h01

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