Bonjour,
Je dois pour une communication entre PC et automate analysé un protocole.
En l'analysant je me suis rendu compte que il y avais des CRC's ( verification de trame par ajout d'octet en fin de trame ).
J'ai alors demandé au constructeur de l'apareil la maniere de calculer le crc.
Celui ci m'as alors fourni les codes suivant :
Il y en 2 car il y a deux type de Crc sont utilisé
CRC 8 :
unsigned char calcHeaderCRC (unsigned char datavalue, unsigned char crcvalue)
{
Unsigned int crc;
crc = crcvalue ^ datavalue;
crc = crc ^ (crc<<1) ^ (crc<<2) ^ (crc<<3) ^ (crc<<4) ^ (crc<<5) ^ (crc<<6) ^ (crc<<7) ;
return (crc & Oxfe) ^((crc<<8) & 1);
}
CRC 16 :
unsigned int calcdataCRC (unsigned char datavalue, unsigned char crcvalue)
{
Unsigned int crclow;
crclow = (crcvalue & 0xff) ^ datavalue;
return ((crcvalue>>8) ^ (crclow<<8) ^ (crclow<<3) ^ (crclow<<12) ^ (crclow>>4) ^ (crclow & 0x0f) ^ ((crclow & 0x0f)<<7)) ;
}
Malheusement pour moi, J'ignore totalement le Language C car je dois pour se projet travailler en Visual basic.
J'aurai voulu savoir si il y avais ame charitable qui pourrais m'expliquer le fonctionnement de ce code pour que je puisse alors le traduire en Visual basic.
Apres quelque recherche, j'ai pu comprendre que le ^ est un Ou exclusif , le & un ET binaire et >>X sont des decalage de bits et que le X est le "nombre" de rang du decalage et le sens des > le sens du decalage.
Voila merci infiniment !