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 :

besoin d aide


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de nemo69500
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 639
    Par défaut besoin d aide
    Pouvez vous me dire , svp , si vous voyer une erreur dans ce code?


    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    #include <math.h>
     
    unsigned char bit_test(unsigned char,unsigned int);
    unsigned char bit_set(unsigned char,unsigned int);
    unsigned char bit_clear(unsigned char,unsigned int);
    unsigned char generate_8bit_crc(unsigned char*,unsigned int,unsigned char);
     
     
    unsigned char generate_8bit_crc(unsigned char* data,unsigned int length, unsigned char pattern)
    {
       unsigned char   *current_data;
       unsigned char   crc_byte;
       unsigned int   byte_counter;
       unsigned int   bit_counter;
     
       current_data = data;
       crc_byte = *current_data++;
     
       for(byte_counter=0; byte_counter < (length-1); byte_counter++)
       {
          for(bit_counter=0; bit_counter < 8; bit_counter++)
          {
             if(bit_test(crc_byte,7)==0)
             {
                crc_byte <<= 1;
                if(bit_test(*current_data, 7 - bit_counter)==128)
                {crc_byte=bit_set(crc_byte,0);}
                else
                {crc_byte=bit_clear(crc_byte,0); }
                continue;
             }
             crc_byte <<= 1;
             if(bit_test(*current_data, 7 - bit_counter)==128)
             {
               crc_byte=bit_set(crc_byte,0);
             }
             else
             {
             crc_byte=bit_clear(crc_byte,0);
             }
          crc_byte ^= pattern;
          }
       current_data++;
       }
       for(bit_counter=0; bit_counter < 8; bit_counter++)
       {
          if(bit_test(crc_byte,7)==0)
          {
             crc_byte <<= 1;
             continue;
          }
          crc_byte <<= 1;
          crc_byte ^= pattern;
       }
       return crc_byte;
    }
     
    unsigned char bit_test(unsigned char X,unsigned int Y)
    {
       unsigned char RES;
       unsigned char Z=pow(2,Y);
       RES=X & Z;
       return (RES);
    }
     
    unsigned char bit_set(unsigned char X,unsigned int Y)
    {
     
       unsigned char Z=pow(2,Y);
       return (X | Z);
    }
     
    unsigned char bit_clear(unsigned char X,unsigned int Y)
    {
       unsigned char Z=pow(2,Y);
       return (X & (~Z));
    }

    Merci d avance de votre aide

  2. #2
    Membre éclairé
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Par défaut
    Tu veux pas plutot nous dire ce qui ne marche pas ?

  3. #3
    Membre chevronné Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Par défaut
    Lis les règles du forum avant de poster !!

  4. #4
    Membre chevronné Avatar de nemo69500
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 639
    Par défaut
    Je recoi une trame de 7 caractere + 2 de crc sur le port com de mon pc .

    Je dois verifier le premier caractere pour le debut de la trame , mais le probleme se situ au niveau du CRC, je n arrive pas a le recalculer. J ai pri la meme fonction que pour l envoyer sauf que je ne l ai pas faite . C est un PIC qui m envoi la trame . Bref je n arrive pas a recalculer mon CRC

    Voila le probleme

    Pouvez vous m aider?

    PS : dsl pour le code lacher en vrac mais je suis legerement sous pression a cause de ce code , ca fais depuis ce matin que je suis dessus , dsl encore une fois

  5. #5
    Membre chevronné Avatar de nemo69500
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 639
    Par défaut
    Personne ne peux m aider svp?

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: besoin d aide
    Citation Envoyé par nemo69500
    Pouvez vous me dire , svp , si vous voyer une erreur dans ce code?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       unsigned char Z=pow(2,Y);
    Il est absurde d'utiliser pow() pour une puissance de 2. Il suffit de décaler un bit d'autant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       unsigned char Z = 1u << Y;
    Plus besoin de <math.h>
    Pour le reste c'est pas facile. Tu as les specs, un exemple de donnée avant / après ?

    Autre chose. Il est inutile de passer des paramètres de type 'char' à une fonction (idem pour le type retourné). Ca fait générer du code en plus pour rien du tout. Le type par défaut est int ou unsigned[ int]. Idem pour les variables, (sauf exception rare, comme scanf() avec "%c").
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    static unsigned bit_test(unsigned X, unsigned int Y)
    {
       unsigned RES;
       unsigned Z = 1 << Y;
       RES = X & Z;
       return RES;
    }
    etc.

    Et les majuscules, c'est traditionellement pour les constantes...

  7. #7
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Personne ne peux m aider svp?
    Evite les ups ...

    J ai pri la meme fonction que pour l envoyer sauf que je ne l ai pas faite
    J'ai du mal à comprendre alors, si tu as pris la même fonction que pour le calcul du crc il ne devrait pas y avoir de problème ...

  8. #8
    Membre chevronné Avatar de nemo69500
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 639
    Par défaut
    Il est absurde d'utiliser pow() pour une puissance de 2. Il suffit de décaler un bit d'autant :
    la puissance c est Y et pas deux

    et non ca ne marche pas meme si j ai pris le meme code , c est pour cela que je demande si y a pas une erreur

  9. #9
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    la puissance c est Y et pas deux
    Emmanuel disait que c'est 2 à la puissance Y, c'est donc bien une puissance de deux. Ou alors ton erreur vient de là ...

  10. #10
    Membre chevronné Avatar de nemo69500
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 639
    Par défaut
    c possible je regarde et je vous dis

  11. #11
    Membre chevronné Avatar de nemo69500
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 639
    Par défaut
    fonction pow(base,exposant)
    voici une citation de la faq c++ donc non je me suis pas tromper c est bien 2^Y

  12. #12
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    J'ai peur que nous n'ayons pas le même vocabulaire que toi ...

    Pour moi une puissance de 2 c'est 2^X ...

    Ou alors tu n'as pas compris ce qu'Emmanuel voulait te dire :

    En binaire, lorsque tu décalles sur la gauche (en faisant abstraction des débordements), tu multiplie par 2.

    0010 -> 2 (10)
    0100 -> 4 (10)
    ...
    Pour calculer une puissance de deux du type 2^Y, il faut décaller Y fois sur la gauche d'où le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    unsigned char Z = 1u << Y;

  13. #13
    Membre chevronné Avatar de nemo69500
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 639
    Par défaut
    excuser moi j avais mal compris , en attendant j ai toujours un probleme

  14. #14
    Membre Expert

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Par défaut
    Citation Envoyé par nemo69500
    excuser moi j avais mal compris , en attendant j ai toujours un probleme
    Ravi de le savoir mais si tu pouvais juste un peu préciser quel était ce problème dans le code ça serait pas mal et cela te permettrait d'éditer ton message pour y mettre un titre explicite
    "Besoin d'aide" "problème/pb/pbl en C" "ça beug/bog/buggue" "pourquoi ça marche pas?" ne sont pas des titres
    PS : dsl pour le code lacher en vrac mais je suis legerement sous pression a cause de ce code , ca fais depuis ce matin que je suis dessus , dsl encore une fois
    Moi c'est précisément ce qui me met sous pression si l'on peut dire
    MErci d'éviter ça à l'avenir

  15. #15
    Membre chevronné Avatar de nemo69500
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 639
    Par défaut
    Ravi de le savoir mais si tu pouvais juste un peu préciser quel était ce problème dans le code ça serait pas mal et cela te permettrait d'éditer ton message pour y mettre un titre explicite
    Je recoi une trame de 7 caractere + 2 de crc sur le port com de mon pc .

    Je dois verifier le premier caractere pour le debut de la trame , mais le probleme se situ au niveau du CRC, je n arrive pas a le recalculer. J ai pri la meme fonction que pour l envoyer sauf que je ne l ai pas faite . C est un PIC qui m envoi la trame . Bref je n arrive pas a recalculer mon CRC

  16. #16
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Bref je n arrive pas a recalculer mon CRC
    As tu le bon algorithme au moins ?

  17. #17
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par nemo69500
    mais le probleme se situ au niveau du CRC, je n arrive pas a le recalculer.<...> Bref je n arrive pas a recalculer mon CRC
    Ca veux dire quoi exactement 'j'arrive pas à recalculer ? Quel est le problème constaté ?

  18. #18
    Membre chevronné Avatar de nemo69500
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 639
    Par défaut
    Cela signifie que je n arrive pas a avoir le meme crc en ayant la meme trame d octet donc je ne peu pas verifier si la transmission a ete corect

  19. #19
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par nemo69500
    Cela signifie que je n arrive pas a avoir le meme crc en ayant la meme trame d octet donc je ne peu pas verifier si la transmission a ete corect
    Quel est l'algo qui a servi a généré le crc ? Est-il portable (indépendant de la machine).

  20. #20
    Membre chevronné Avatar de nemo69500
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 639
    Par défaut
    La fonction qui a generer le crc est la fonction "generate_crc_8" qui est dans le premier message dans la partie code

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. besoin d'aide pour le composant DBComboBox
    Par jane2002 dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/02/2004, 19h01
  2. Besoin d'aide avec postgresql sous windows NT
    Par Chihuahua dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 18/07/2003, 08h29
  3. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19
  4. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

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