Dummy program to demonstrate problems: working code
Dependencies: SLCD mbed-rtos mbed
Fork of MNG_TC by
Diff: crc.h
- Revision:
- 2:994e741028c7
- Parent:
- 1:df31097c8442
--- a/crc.h Sat Jun 06 04:27:40 2015 +0000 +++ b/crc.h Thu Jun 11 11:20:12 2015 +0000 @@ -1,11 +1,16 @@ -#define WIDTH 16 -#define TOPBIT (1 << 15) -#define POLYNOMIAL 0x1021 +//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 namespace CRC{ - typedef uint16_t crctype; - crctype crcGenerate(const unsigned char message[], int nBytes){ - crctype remainder = 0xffff; + typedef uint16_t crctype16; + crctype16 crc16_gen(const unsigned char message[], unsigned int nBytes){ + crctype16 remainder = 0xffff; int byte; char bit; @@ -15,15 +20,15 @@ each time only one byte is brought 0 xor x = x */ - remainder = remainder ^ ( message[byte] << (WIDTH-8) ); + 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 & TOPBIT){ - remainder = (remainder << 1) ^ POLYNOMIAL; + 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 @@ -37,4 +42,38 @@ return remainder; } -}; \ No newline at end of file + + 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; + } +}