Dummy program to demonstrate problems: working code

Dependencies:   SLCD mbed-rtos mbed

Fork of MNG_TC by Shreesha S

Committer:
shreeshas95
Date:
Thu Sep 17 14:15:00 2015 +0000
Revision:
17:2b04e53f3b1d
Parent:
2:994e741028c7
DUMMP program to demonstrate the problems : working

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shreeshas95 2:994e741028c7 1 //EDITS
shreeshas95 2:994e741028c7 2 //changed the initial remainder from 0x0000 to 0xffff according to the standards
shreeshas95 2:994e741028c7 3 //made two seperate functions crc16_gen and crc8_gen
shreeshas95 2:994e741028c7 4
shreeshas95 2:994e741028c7 5 #define TOPBIT16 (1 << 15)
shreeshas95 2:994e741028c7 6 #define TOPBIT8 (1 << 7)
shreeshas95 2:994e741028c7 7 #define POLYNOMIAL16 0x1021
shreeshas95 2:994e741028c7 8 #define POLYNOMIAL8 0xEA
shreeshas95 0:b5b370873460 9
shreeshas95 1:df31097c8442 10 namespace CRC{
shreeshas95 2:994e741028c7 11 typedef uint16_t crctype16;
shreeshas95 2:994e741028c7 12 crctype16 crc16_gen(const unsigned char message[], unsigned int nBytes){
shreeshas95 2:994e741028c7 13 crctype16 remainder = 0xffff;
shreeshas95 0:b5b370873460 14 int byte;
shreeshas95 0:b5b370873460 15 char bit;
shreeshas95 0:b5b370873460 16
shreeshas95 0:b5b370873460 17 for( byte = 0 ; byte < nBytes ; byte++ ){
shreeshas95 0:b5b370873460 18 /*
shreeshas95 0:b5b370873460 19 Bring the data byte by byte
shreeshas95 0:b5b370873460 20 each time only one byte is brought
shreeshas95 0:b5b370873460 21 0 xor x = x
shreeshas95 0:b5b370873460 22 */
shreeshas95 2:994e741028c7 23 remainder = remainder ^ ( message[byte] << 8 );
shreeshas95 0:b5b370873460 24
shreeshas95 0:b5b370873460 25 for( bit = 8 ; bit > 0 ; bit--){
shreeshas95 0:b5b370873460 26 /*
shreeshas95 0:b5b370873460 27 for each bit, xor the remainder with polynomial
shreeshas95 0:b5b370873460 28 if the MSB is 1
shreeshas95 0:b5b370873460 29 */
shreeshas95 2:994e741028c7 30 if(remainder & TOPBIT16){
shreeshas95 2:994e741028c7 31 remainder = (remainder << 1) ^ POLYNOMIAL16;
shreeshas95 0:b5b370873460 32 /*
shreeshas95 0:b5b370873460 33 each time the remainder is xor-ed with polynomial, the MSB is made zero
shreeshas95 0:b5b370873460 34 hence the first digit of the remainder is ignored in the loop
shreeshas95 0:b5b370873460 35 */
shreeshas95 0:b5b370873460 36 }
shreeshas95 0:b5b370873460 37 else{
shreeshas95 0:b5b370873460 38 remainder = (remainder << 1);
shreeshas95 0:b5b370873460 39 }
shreeshas95 0:b5b370873460 40 }
shreeshas95 0:b5b370873460 41 }
shreeshas95 0:b5b370873460 42
shreeshas95 0:b5b370873460 43 return remainder;
shreeshas95 0:b5b370873460 44 }
shreeshas95 2:994e741028c7 45
shreeshas95 2:994e741028c7 46 typedef uint8_t crctype8;
shreeshas95 2:994e741028c7 47 crctype8 crc8_gen(const unsigned char message[], unsigned int nBytes){
shreeshas95 2:994e741028c7 48
shreeshas95 2:994e741028c7 49 crctype8 remainder = 0xff;
shreeshas95 2:994e741028c7 50
shreeshas95 2:994e741028c7 51 for(int byte = 0 ; byte < nBytes ; byte++ ){
shreeshas95 2:994e741028c7 52 /*
shreeshas95 2:994e741028c7 53 Bring the data byte by byte
shreeshas95 2:994e741028c7 54 each time only one byte is brought
shreeshas95 2:994e741028c7 55 0 xor x = x
shreeshas95 2:994e741028c7 56 */
shreeshas95 2:994e741028c7 57 remainder = remainder ^ ( message[byte] );
shreeshas95 2:994e741028c7 58
shreeshas95 2:994e741028c7 59 for(int bit = 8 ; bit > 0 ; bit--){
shreeshas95 2:994e741028c7 60 /*
shreeshas95 2:994e741028c7 61 for each bit, xor the remainder with polynomial
shreeshas95 2:994e741028c7 62 if the MSB is 1
shreeshas95 2:994e741028c7 63 */
shreeshas95 2:994e741028c7 64 if(remainder & TOPBIT8){
shreeshas95 2:994e741028c7 65 remainder = (remainder << 1) ^ POLYNOMIAL8;
shreeshas95 2:994e741028c7 66 /*
shreeshas95 2:994e741028c7 67 each time the remainder is xor-ed with polynomial, the MSB is made zero
shreeshas95 2:994e741028c7 68 hence the first digit of the remainder is ignored in the loop
shreeshas95 2:994e741028c7 69 */
shreeshas95 2:994e741028c7 70 }
shreeshas95 2:994e741028c7 71 else{
shreeshas95 2:994e741028c7 72 remainder = (remainder << 1);
shreeshas95 2:994e741028c7 73 }
shreeshas95 2:994e741028c7 74 }
shreeshas95 2:994e741028c7 75 }
shreeshas95 2:994e741028c7 76
shreeshas95 2:994e741028c7 77 return remainder;
shreeshas95 2:994e741028c7 78 }
shreeshas95 2:994e741028c7 79 }