25 lines
657 B
C
25 lines
657 B
C
|
#include "basic.h"
|
||
|
|
||
|
// Calculate the CRC for transmitted and received data using
|
||
|
// the CCITT 16bit algorithm (X^16 + X^12 + X^5 + 1).
|
||
|
|
||
|
uint16_t crc16(char * buf, int len){
|
||
|
unsigned int crc=0xffff;
|
||
|
|
||
|
for(int i=0;i<len;i++){
|
||
|
crc = (unsigned char)(crc >> 8) | (crc << 8);
|
||
|
crc ^= buf[i];
|
||
|
crc ^= (unsigned char)(crc & 0xff) >> 4;
|
||
|
crc ^= (crc << 8) << 4;
|
||
|
crc ^= ((crc & 0xff) << 4) << 1;
|
||
|
};
|
||
|
return crc;
|
||
|
};
|
||
|
|
||
|
/* Note:
|
||
|
It is best not to alter this code. For example, (crc<<8)<<4 does
|
||
|
not generate the same code as crc<<12. Although the result of the
|
||
|
computation is the same, the latter generates much more code and
|
||
|
executes slower.
|
||
|
*/
|