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

Visual C++ Discussion :

besoin d'un avis sur le calcul msb et lsb d'une trame


Sujet :

Visual C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    67
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 67
    Par d�faut besoin d'un avis sur le calcul msb et lsb d'une trame
    Coucou � tous j'aurai besoin de votre avis sur une m�thode de calcul

    voici la situation:
    dans un thread je lis mon port com.
    Je r�cup�re une trame.
    Si la trame est correcte, les 2 derniers octets correspondent au msb et lsb de la trame.
    En suite je mets � jour mes contr�les si la trame est correcte.

    le probl�me est le suivant:
    En mode debug(GO F5) sans mettre de point d'arr�t mon application fonction correctement.
    Mais dans que je lance l'ex�cutable �a ne va plus... mes voyants restent au rouge( control). De plus l'application prend beaucoup de ressources de l'UC.
    En cherchant, j'ai trouv� que c'�tait la fonction "calculerPoidBits" qui prenait au temps de ressources.


    quelqu'un aurait -il une m�thode moin lourde.

    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
    79
    80
    81
    82
    83
    84
    85
    86
     
    static unsigned char aCRCmsb[] = {
          0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
          0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
          0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
          0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
          0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
          0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
          0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
          0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
          0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
          0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
          0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
          0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
          0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
          0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
          0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
          0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
          0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
          0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
          0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
          0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
          0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
          0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
          0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
          0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
          0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
          0x80, 0x41, 0x00, 0xC1, 0x81, 0x40 };
     
    static unsigned char aCRClsb[] = {
          0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,
          0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
          0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
          0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,
          0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,
          0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
          0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,
          0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,
          0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
          0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,
          0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,
          0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
          0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
          0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
          0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
          0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,
          0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,
          0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
          0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,
          0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,
          0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
          0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,
          0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,
          0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
          0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,
          0x43, 0x83, 0x41, 0x81, 0x80, 0x40 };
     
     
    //calculer les bits de poids fort et de poids faible
    //"trame" est l'attribut sur le quel on travail, "nombreOctet" correspond est lier à la taille de la trame
    //retourne "true" si l'opération c'est correctement passé
    bool CCom::calculerPoidBits(int nombreOctet, unsigned char *trame)
    {
    	unsigned char msb=0xFF;
    	unsigned char lsb=0xFF;
    	unsigned char temp;
    	int ind=0;
    	int taill=nombreOctet;
     
    	nombreOctet=nombreOctet-2;
     
    	do                         
    	{
    		if(nombreOctet>0)
    		{
    			temp = msb ^ trame[ind];
                ind++;
    			msb = lsb ^ aCRCmsb[temp];
    			lsb = aCRClsb[temp];
    		}
    	}while(nombreOctet--);
     
    	trame[taill-2]=lsb;
    	trame[taill-1]=msb;
    	return true;
    }
    je rappel que si j'ai d�clar� ces attributs et cette m�thode en static c'est parce que je l'ai utilise dans un thread

    merci d'avance

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Si la trame est correcte, les 2 derniers octets correspondent au msb et lsb de la trame.
    Je ne vois pas du tout ce que tu veux dire par l�...

    PS: n'h�site pas � mettre des const pour tes deux tableaux statiques.
    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.

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    67
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 67
    Par d�faut
    calcul des Bits de poid fort et bits de poid faible

  4. #4
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Tu ne m'apprends rien, l�...
    M�me avec ton calcul et tes tables, je n'arrives pas � voir quels bits de poids fort et faible tu veux, et pourquoi il te faut deux octets pour cela.

    • Ce n'est s�rement pas le bit de poids fort du premier octet de la trame et le bit de poids faible du dernier ?
    • Serait-ce la somme du bit de poids fort de chaque octet, et m�me chose pour le bit de poids faible ?
    • Ou bien, un XOR entre les OCTETS de poids fort de chaque paire d'octet ?
    • Edit: D'apr�s ton code, �a a l'air d'�tre un XOR entre l'octet de poids fort de chaque paire, une valeur de tableau d�pendant de l'octet de poids faible de la paire pr�c�dente et une valeur de tableau d�pendant du r�sultat d'un autre XOR...
      Et les octets ne sont pas lus deux par deux...

    Tant qu'on ne sait pas pr�cis�ment ce que tu veux calculer, on ne peut pas t'aider...

    Edit: C'est un algorithme de calcul de CRC ?
    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
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Tu devrais essayer ceci : J'ai simplifi� les tests dans la boucle.
    Les d�clarations const, aussi, �a peut parfois aider � optimiser (j'ai aussi d�clar� const les tableaux)
    Code C++ : 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
    //[static]
    bool CCom::calculerPoidBitsEx(int nombreOctet, unsigned char *pTrame)
    {
    unsigned char msb=0xFF;
    unsigned char lsb=0xFF;
    unsigned char temp;
    int index=0;
    int const taill=nombreOctet;
     
    unsigned char *pCrc = &pTrame[taill-2];
    unsigned char const *pcTrame = pTrame;
     
     
    nombreOctet=nombreOctet-2;
     
    while(nombreOctet>0)
    {
    	temp = msb ^ pcTrame[index];
    	index++;
    	msb = lsb ^ aCRCmsb[temp];
    	lsb = aCRClsb[temp];
    	nombreOctet--;
    }
     
    pCrc[0]=lsb;
    pCrc[1]=msb;
    return true;
    }
    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.

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    67
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 67
    Par d�faut
    D�sol�, je me suis un peu absent�

    Pour r�pondre � tes questions :
    Non, ce n'est pas le bit de poids fort du premier octet de la trame et le bit de poids faible du dernier.
    Non, je ne fais pas de somme entre les bits
    En fait, tu as bien analys� la m�thode.

    Je vais essayer ta proposition, merci

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Besoin de votre avis sur stocker image dans Blob
    Par Lideln dans le forum SQL Proc�dural
    R�ponses: 2
    Dernier message: 04/07/2006, 13h49
  2. Besoin d'un avis sur le salaire
    Par Le Parrain dans le forum Salaires
    R�ponses: 8
    Dernier message: 19/05/2006, 14h48
  3. Besoin d'un avis sur une solution
    Par el_quincho dans le forum Access
    R�ponses: 3
    Dernier message: 19/04/2006, 13h27
  4. Besoin de vos avis sur un algo
    Par vodevil dans le forum Langage
    R�ponses: 2
    Dernier message: 17/02/2006, 16h40
  5. R�ponses: 6
    Dernier message: 28/02/2005, 14h32

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