Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: FreescaleIAP SimpleDMA mbed-rtos mbed
Fork of CDMS_CODE by
crc.h
- Committer:
- shreeshas95
- Date:
- 2015-12-01
- Revision:
- 0:f016e9e8d48b
- Child:
- 6:79d422d1ed42
File content as of revision 0:f016e9e8d48b:
//EDITS
//changed the initial remainder from 0x0000 to 0xffff according to the standards
//made two seperate functions crc16_gen and crc8_gen
#define TOPBIT16 (1 << 15)
#define TOPBIT8 (1 << 7)
#define POLYNOMIAL16 0x1021
#define POLYNOMIAL8 0xEA
typedef uint16_t crctype16;
crctype16 crc16_gen(const unsigned char message[], unsigned int nBytes){
crctype16 remainder = 0xffff;
int byte;
char bit;
for( byte = 0 ; byte < nBytes ; byte++ ){
/*
Bring the data byte by byte
each time only one byte is brought
0 xor x = x
*/
remainder = remainder ^ ( message[byte] << 8 );
for( bit = 8 ; bit > 0 ; bit--){
/*
for each bit, xor the remainder with polynomial
if the MSB is 1
*/
if(remainder & TOPBIT16){
remainder = (remainder << 1) ^ POLYNOMIAL16;
/*
each time the remainder is xor-ed with polynomial, the MSB is made zero
hence the first digit of the remainder is ignored in the loop
*/
}
else{
remainder = (remainder << 1);
}
}
}
return remainder;
}
typedef uint8_t crctype8;
crctype8 crc8_gen(const unsigned char message[], unsigned int nBytes){
crctype8 remainder = 0xff;
for(int byte = 0 ; byte < nBytes ; byte++ ){
/*
Bring the data byte by byte
each time only one byte is brought
0 xor x = x
*/
remainder = remainder ^ ( message[byte] );
for(int bit = 8 ; bit > 0 ; bit--){
/*
for each bit, xor the remainder with polynomial
if the MSB is 1
*/
if(remainder & TOPBIT8){
remainder = (remainder << 1) ^ POLYNOMIAL8;
/*
each time the remainder is xor-ed with polynomial, the MSB is made zero
hence the first digit of the remainder is ignored in the loop
*/
}
else{
remainder = (remainder << 1);
}
}
}
return remainder;
}
