Cette source permet de Calculer le CRC16 ou <Contrôle de redondance cyclique> d'un Tableau selon le Polynome 0xA001 en accord avec le protocol JBUS.
Source / Exemple :
Auteur : VirtuA
unsigned int Crc16(unsigned char *Adresse_tab , unsigned char Taille_max)
{
unsigned int Crc = 0xFFFF;
unsigned int Polynome = 0xA001;
unsigned char CptOctet = 0;
unsigned char CptBit = 0;
unsigned char Parity= 0;
Crc = 0xFFFF;
Polynome = 0xA001; // Polynôme = 2^15 + 2^13 + 2^0 = 0xA001.
for ( CptOctet= 0 ; CptOctet < Taille_max ; CptOctet++)
{
Crc ^= *( Adresse_tab + CptOctet); //Ou exculsif entre octet message et CRC
for ( CptBit = 0; CptBit <= 7 ; CptBit++) /* Mise a 0 du compteur nombre de bits */
{
Parity= Crc;
Crc >>= 1; // Décalage a droite du crc
if (Parity%2 == VRAI) Crc ^= Polynome; // Test si nombre impair -> Apres decalage à droite il y aura une retenue
} // "ou exclusif" entre le CRC et le polynome generateur.
}
return(Crc);
}
Conclusion :
La fonction renvoie un INT ( CRC16 sur 2 octets ).
Un petit soft complet réalisé en C++ sera disponible sur mon site perso
http://www.virtuanet.fr.st
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.