MGE UPS SYSTEMS
/**************************************************************************************************************************/
/*
APPEL DE LA FONCTION : crc = crc16 (message, longueur) ;
/*
avec char *message ; message = adresse de début du message
/*
/*
int longueur ; longueur du message reçu (CRC inclus)
/*
exprimée en nombre d'octets
/*
int crc ; = CRC16 calculé sur les 3 zones "numéro",
/*
"code" et "information".
/*
/*
COMPTE-RENDU : crc 16 calculé (int crc)
/**************************************************************************************************************************/
int crc16 (message, longueur)
unsigned char message [ ] ; /* buffer contenant le message
int longueur ;
{
int i ;
int j ;
union {
int ival ;
unsigned char cval [ 2 ] ;
} crcal
crcal.ival = 0XFFFF ;
i = 0 ;
longueur = longueur - 2 ;
while ( i < longueur )
{
j = (int) ( message [ i ] ^ crcal.cval [ CPH ] ) ;
crcal.cval [ CPH ] = tbcrch [ j ] ^ crcal.cval [ CPL ] ;
crcal.cval [ CPL ] = tbcrcl [ j ] ;
i++ ;
} ;
return ( crcal.ival ) ;
}
nota : si le CRC 16 est calculé par la méthode des tables, le premier octet transmis est celui des poids forts
Installation et utilisation du système de communication JBUS : F-51029066XT/AB
/* dont le crc16 est à calculer.
/* longueur du message à contrôler
/* (crc16 inclus)
/* début de la fonction
/* variable auxiliaire de boucle
/* variable auxiliaire de calcul et de déplacement
/* crc 16 calculé considéré
/* - entier
/* - tableau de 2 caractères
/* unsigned est important car sinon l'extension de signe
/* crée des déplacements négatifs par rapport au début
/* du tableau
/*$ initialisation du crc calculé
/*$ correction de la longueur à contrôler
/*$ sortir le crc16 reçu de la longueur à contrôler
/*$ TANT QUE il y a des octets à contrôler FAIRE
/*$ calculer l'index de recherche
/*$ calcul des poids forts
/*$ calcul des poids faibles
/*$ passage à l'octet suivant
/*$ FIN TANT QUE il y a des octets à contrôler
/*$ retourner le crc calculé
/* fin de la fonction
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
25