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++Builder Discussion :

retrouver unesuite de caractères dans un tableau de char


Sujet :

C++Builder

  1. #1
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 014
    Points
    2 014
    Par défaut retrouver unesuite de caractères dans un tableau de char
    Bonjour,

    Afin de retrouver un identifiant de début de trame dans un buffer reception d'une RS232, je cherche à retrouver une série de char (l'identifiant) dans un tableau de char.

    Ca revient à rechercher la position d'un mot dans une phrase...

    Il me semble avoir déjà vu un truc de ce genre là dans la FAQ ou le cours de Gilles Louise, mais pas moyen de retrouver...

    Merci d'avance pour votre aide
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  2. #2
    Membre chevronné
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Points : 1 911
    Points
    1 911
    Par défaut
    Je ne crois pas avoir parlé de ce problème mais comme je vois votre message, je peux essayer de vous aider.

    Vous pouvez passer par les AnsiString à condition que votre suite de char ne contienne pas de 0 (zéro binaire sur 8 bits) car c'est le code fin des chaînes dites "à zéro terminal". Dans ces conditions, si C est cette suite de caractères terminée par 0 et si A est un AnsiString on peut écrire

    Vous avez ainsi transformé votre suite d'octets en AnsiString. Si la chaîne cherchée peut subir le même traitement i.e. un zéro en fin de chaine, faites pareil avec elle, on met dans l'AnsiString B la chaîne cherchée D

    Dans ces conditions il suffit d'écrire

    pour savoir si B est inclus dans A. Si oui l'entier i est l'index à partir de 1 pour les AnsiString sinon i=0.

    Si vous n'êtes pas certain que les deux chaînes puissent se terminer par 0 (car 0 serait utilisé ailleurs), alors vous êtes à mon avis obligé de programmer vous-même cette fonction de recherche en C++.

    À bientôt
    Gilles

  3. #3
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 014
    Points
    2 014
    Par défaut
    merci beaucoup pour votre réponse

    Mais Aie ! Il peut y avoir beaucoup de zeros dans mon tableau de char


    Comment peut on faire cette fameuse recherche "programmée par moi même" ?
    On recherche le premier caractère de l'identifiant dans le tableau à l'aide d'une boucle For puis on regarde si le caractère suivant est bien le second caractère de l'identifiant etc...
    ...et on recommence la recherche du premier caractère dans le reste du tableau si par hasard ce n'etait pas un debut d'identifiant qui a été trouvé la première fois etc... ?
    pfiouuu ca va me faire un bel exercice !

    merci encore
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  4. #4
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 014
    Points
    2 014
    Par défaut
    ohh une autre idée...

    Ne serait il pas possible de faire une copie de mon tableau de char
    de remplacer tous les zeros par autre chose dans cette copie
    de convertir cette copie en string
    et de rechercher la position de l'identifiant dans cette copie privée de ses zeros ? => La position de l'identifiant dans le tableau de char etant bien sur la meme que dans la copie transformée...

    c'est une idée ou je dis une grosse bétise ?

    re re merci
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    En standard on peut tout à fait manipuler des chaînes avec 0, il suffit d'utiliser les fonctions (ici le constructeur) appropriées :

    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
    #include <string>
     
    std::string buffer(donnes_recues, donnees_recues + taille_donnees);
    std::string to_find = "blop";
     
    std::string::size_type pos = buffer.find(to_find);
     
    if (pos != std::string::npos)
    {
        // Trouvé à la position pos
    }
    else
    {
        // Pas trouvé
    }
    Après tu peux très facilement repasser en AnsiString si tu le souhaites.

  6. #6
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 014
    Points
    2 014
    Par défaut
    Bonjour,

    J'essai de faire la solution de loulou qui apparement est la bonne mais je n'y arrive pas pour le moment, il y a trop de notions que je ne maitrise pas dedans...je m'acharne mais c'est pour ca que je ne dis pas encore merci...

    Monsieur Louise, j'en profite pour mettre en application ce que vous venez de m'apprendre et je n'y arrive pas !
    le fameux A=C ne fonctionne pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    unsigned char tableau[10]={1,2,3,4,5,6,7,8,9,0};
    AnsiString tab = "         " ;
    tab = tableau ; //A=C
    Label1->Caption = tableau[2];
    Label2->Caption = tab ;
    Ca n'a pas l'air de plaire au compilateur

    merci
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  7. #7
    Membre chevronné
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Points : 1 911
    Points
    1 911
    Par défaut
    C'est le unsigned qui fâche, si vous voulez avoir des AnsiString, il faut que ce soit un tableau de caractères simples soit char tout court sans autre spécification.

    Sinon, programmez-le vous-même, c'est simple comme bonjour. Pour ma part, je vais plus vite à le refaire qu'à chercher la fonction correspondante que j'ai fatalement oubliée et ça fait travailler mon neurone unique.

    Comme on n'a pas de caractère fin, on a obligatoirement la longuer des chaînes de caractères, c'est l'un ou l'autre.

    Si donc phrase a p caractères et mot m caractères, on appelle notre fonction ainsi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    i=Trouve(phrase, p, mot, m);
    où i sera l'index du mot dans la phrase si ca existe (et comme c'est nous qui le programmons, on part de 0 pour l'index) sinon i=-1.

    On divise le problème en deux, d'une part, chercher le mot à partir d'une position donnée (CestLa), d'autre part, boucler dans la phrase (Trouve). On déclare donc ainsi ces deux fonctions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    __fastcall int Trouve(char*,int,char*,int);
    __fastcall bool CestLa(char*,int,char*,int);
    Et on les programme par exemple ainsi.

    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
    int __fastcall TForm1::Trouve(char* c1, int l1, char* c2, int l2)
    {
    int i=0;
    bool ok=false;
     
    if(l1>=l2) do ok=CestLa(c1,i++,c2,l2);
               while(!ok && i!=l1-l2+1);
     
    if (ok) return --i; else return -1;
    }
    //---------------------------------------------------------------------------
    bool __fastcall TForm1::CestLa(char* c1, int i, char* c2, int l2)
    {
    int j;
     
    for(j=0;j<l2;j++) if(c1[i++]!=c2[j]) return false;
    return true;
    }
    Bon, j'ai réinventé la roue, d'accord, mais encore une fois, ça a fait travailler mon neurone unique.

    À bientôt
    Gilles

  8. #8
    Rédacteur
    Avatar de dvsoft
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2002
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2002
    Messages : 176
    Points : 622
    Points
    622
    Par défaut
    Bonjour,

    En principe les trames "Séries" ont un "Format" qui est connu d’avance, cela de permet de faire un
    Mapping de ton buffer de réception dans une structure, ainsi que de détecter le début et la fin d’une trame.

    C’est le rôle d’un driver de réception de faire ce contrôle, car effectuer le traitement après, peut être très long et peut performant.

    Indique nous, si cette trame a un format ou pas, pour t’aider à définir ta structure.

    Cette "trame" à peut être un format connue "Modbus" par exemple

    Bon courage
    Alain

  9. #9
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 014
    Points
    2 014
    Par défaut
    Bonjour et merci beaucoup pour vos explications

    Mon buffer dans lequel je recherche des trames est un tableau de char rempli à partir de la lecture d'un composant USB (le FT245BM de FTDI) à l'aide d'une fonction qui va bien, fournie par le fabricant.

    J'ai donc un tableau rempli de char et je dois trouver dedans des trames qui ont un format clairement défini

    Toutes les trames commencent par un identifiant connu ("SYNCHRO" en ASCII soit 7 octets) et il y a un nombre connu d'octets dans la trame apres l'identifiant.

    je precise que c'est moi qui ai défini le format des trames...je peux faire ce que je veux à ce niveau là.
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  10. #10
    Rédacteur
    Avatar de dvsoft
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2002
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2002
    Messages : 176
    Points : 622
    Points
    622
    Par défaut
    re

    Toutes les trames commencent par un identifiant connu ("SYNCHRO" en ASCII soit 7 octets) et il y a un nombre connu d'octets dans la trame apres l'identifiant.
    Je me demande si c'est une bonne idée d'utiliser "SYNCHRO" pour marquer le début de la trame !!

    Une suite de 2 octet par exemple "STXSTX" devrais suffire
    puis le type de Data, si tu as plusieurs type de trame
    puis tu ajoute la taille des data sur 1 ou 2 octet, si la taille peut changée avec le même type de trame
    puis les data
    puis le CRC sur 2 octets
    puis un caractere de fin de trame "ETX" par exemple

    Ton driver bas niveau doit fournis la trame, CAD le type de trame les data et le CRC aux fonctions de plus haut niveau, pour analyse

    Tu calcul ton CRC avant tout chose, si il est ok, tu peut poursuivre le traitement de la trame.

    Main bon c'est juste une idée, a toi de voir

    Bon courage
    Alain

  11. #11
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 014
    Points
    2 014
    Par défaut
    je prends note avec grand interet

    c'est quoi ces histoires de driver premier niveau et second niveau ?
    J'ai juste une fonction qui me rempli mon buffer moi !

    merci
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  12. #12
    Rédacteur
    Avatar de dvsoft
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2002
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2002
    Messages : 176
    Points : 622
    Points
    622
    Par défaut
    re

    c'est quoi ces histoires de driver premier niveau et second niveau ?
    J'ai juste une fonction qui me rempli mon buffer moi ! Rolling Eyes
    Diviser pour mieux régner, en quelque sorte.

    Dans les applications de communication, on a pour habitude de diviser les taches, à effectuer en plusieurs couches.
    Il existe des models très connue ISO par exemple, qui définie toutes les couches depuis la liaison physique jusqu'à l’application.

    Dans ton cas, il s’agit d’une communication simple,"je ne sais pas ce qui est à l’autre bout de ton port USB."

    Donc sur ton application Windows je suppose, pour que ce soit plus simple à mettre en œuvre, tu découpe ton
    programme en taches (couches, comme tu veut) qui on chacune leur rôle. La couche la plus basse, s’occupe du
    port USB et de la détection des trames, la couche au dessus, peut par exemple contrôler la validation des trames,
    avant de faire le traitement, etc…

    Pour résumer, tu découpe ton programme, en couches logiques, qui dépendent tu travail qu’elles ont a faire.

    Encore une fois ca n'engage que moi
    J’espère ne pas avoir semer le doute dans ton esprit

    Bon courage
    Alain

  13. #13
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 014
    Points
    2 014
    Par défaut
    au contraire, ca m'aide beaucoup

    Je vais essayer de mettre tout ca en oeuvre, aussi bien la structuration des taches à faires que les conseils prodigés par Gilles louise pour la recherche des trames.
    Non pas que le code de loulou ne me convient pas, c'est juste que je ne suis pas un as e la programmation et je ne serais jamais un pro spécialiste en ce domaine ; De ce fait, j'ai je pense tout interet à faire "travailler mon neurone" plutot que de tenter d'apprendre les techniques les plus avancées du logiciel BCB.

    Ce qui est au bout de mon USB, c'est une carte d'acquisition de ma fabrication. Le composant USB (FT245BM de FTDI) est un composant qui trasforme une communication parallèle en com usb.
    D'un coté j'ai un microcontroler qui parle au FT245 par un protocole parallèle on ne peut plus simple.
    De l'autre coté, j'ai une dll FTDI qui possède tout un tas de fonction pour lire ou ecrire dans le composant.
    Il y a un buffer dans les deux sens de com et on y empile ce que l'on veut...

    merci
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  14. #14
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Sinon, et pour répondre à la quetsion, pour éviter de mettre en lice d'autres objets, il y aurait ceci :

    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
    19
    20
    21
    22
    23
    24
    bool Rechercher3Caracteres(char *B, int nbB, char *T)
    {
     
    #define lim (i<nbB)
     
    int i = 0;
    while lim
        {
        if(B[i] == T[0])
            {
            i++;
            if( lim && (B[i] == T[1]))
                {
                i++;
                if( lim && (B[i] == T[2])) return true;
                }
            }
        else
            {
            i++;
            }
        }
    return false;
    }
    Celà dit, si les premiers octets constituent une sorte de header, dans ce cas il faut utiliser une structure ou une class pour retrouver plus facilement les données. Le test étant simplifié puisqu'il s'agit alors d'évaluer chaque caractère dans une équation globale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((B[0] = T[0]) && ( B[1] == T[1]) && (B[2] == T[2])...)
    ou bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((B[0] = 'r') && ( B[1] == 'i') && (B[2] == 'f')&& (B[3] == 'f'))
    A plus !

  15. #15
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par dvsoft
    Je me demande si c'est une bonne idée d'utiliser "SYNCHRO" pour marquer le début de la trame !!

    Une suite de 2 octet par exemple "STXSTX" devrais suffire
    2 octets seulement ? mais la probabilité d'avoir ces deux octets à la suite dans le flux de donnée n'est pas si improbable que ca, non ?
    Par ailleurs, qu'est ce que le caractère STX ?

    Citation Envoyé par dvsoft
    puis le CRC sur 2 octets
    Qu'est ce que le CRC ? Un Ou exclusif de tous les octets envoyés ? Comment le fabrique on ?

    Citation Envoyé par dvsoft
    puis un caractere de fin de trame "ETX" par exemple
    qu'est ce que le caractère "ETX" ?

    merci encore, je suis à fond dedans !!
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  16. #16
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 014
    Points
    2 014
    Par défaut
    quel est linteret de l'octet de fin aussi ? etant donné que l'on connait le type de data et/ou le nombre d'octets transférés

    re merci...ca avance !
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  17. #17
    Rédacteur
    Avatar de dvsoft
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2002
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2002
    Messages : 176
    Points : 622
    Points
    622
    Par défaut
    bonsoir

    Citation Envoyé par petitours
    Citation Envoyé par dvsoft
    Je me demande si c'est une bonne idée d'utiliser "SYNCHRO" pour marquer le début de la trame !!

    Une suite de 2 octet par exemple "STXSTX" devrais suffire
    2 octets seulement ? mais la probabilité d'avoir ces deux octets à la suite dans le flux de donnée n'est pas si improbable que ca, non ?
    Par ailleurs, qu'est ce que le caractère STX ?

    Citation Envoyé par dvsoft
    puis le CRC sur 2 octets
    Qu'est ce que le CRC ? Un Ou exclusif de tous les octets envoyés ? Comment le fabrique on ?

    Citation Envoyé par dvsoft
    puis un caractere de fin de trame "ETX" par exemple
    qu'est ce que le caractère "ETX" ?

    merci encore, je suis à fond dedans !!

    Au depart, la trame est vide, tu attend la suite des 2 octets de synchro
    STX = code ASCII 0x02
    ETX = code ASCII 0x03


    La fin de trame est utilisé pour sortire de la lecture de la trame, apres avoir lut tes X octets de data, tu lit les 2 octets du CRC puis le caractere suivant doit etre ton ETX.

    je ne peut pas dire grand chose sur le calcul du crc un article est en cours, il est fait, il ne reste plus qu"a le plublier.....

    mais pour aller vite devras le faire par une "lookuptable"

    Bon courage
    ALain

  18. #18
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 014
    Points
    2 014
    Par défaut
    Pour le CRC, je viens de faire des recherches et je me suis noyé le cerveau pour la nuit avec les algo présentés...
    Je vais rester à des choses beaucoup plus simples que j'utilise déjà au niveau de mes microcontroleurs : le OU exclusif de tous les octets envoyés.
    Cela me semble d'autant plus raisonable que le composant FT245 gère lui meme des sécurité pour son transfert de data via l'USB. Je ne fais que mettre des bretelles par dessus la ceinture !
    J'ai trouvé comment faire ca en C++ avec ^

    Apres mure reflexion il y a de grandes chances que je parte sur l'idée de trames ainsi :
    début de trame avec 5 octets "DEBUT" afin de reduire les chances de tomber sur des datas identiques à l'identifiant par malchance (d'autant que 2fois le meme octet est une suite de valeur cohérente avec les données physique que je mesure)
    2octets pour définir le type de trame (et la taille de la trame par la meme occasion)
    Les X data
    un OU exclusif des data envoyées

    : quelle est la meilleure facon de stoquer a quoi correspondent les différents type de trame ? Un fichier externe au logiciel ou directement dedans ?

    je vous tiens au courant sachant qu'il me reste le plus dur à faire : gérer le buffer les les datas qui continuent à arriver pendant que je fais ma cuisine !

    merci encore
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Insérer plusieurs caractères dans un tableau
    Par Gigatrappeur dans le forum Ada
    Réponses: 4
    Dernier message: 28/12/2007, 21h24
  2. Remplir une chaîne de caractère dans un tableau
    Par Windsor123 dans le forum C
    Réponses: 4
    Dernier message: 03/11/2007, 01h29
  3. Réponses: 3
    Dernier message: 14/11/2006, 10h45
  4. Réponses: 3
    Dernier message: 26/05/2006, 19h49
  5. Réponses: 4
    Dernier message: 28/10/2005, 13h32

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