performance test of FastCRC lib, compare hardware CRC with Arduino software CRC (crc16.h) and table driven implementation
Dependencies: HW_CRC_K64F mbed
Fork of fastCRCperf by
main.cpp
- Committer:
- pkozyra
- Date:
- 2016-12-01
- Revision:
- 3:cedce9a0524b
- Parent:
- 2:cb216e1d2d42
File content as of revision 3:cedce9a0524b:
//https://developer.mbed.org/users/pkozyra/code/HW_CRC_K64F/ #include "mbed.h" #include "CRC_HW.h" Timer tmr; #define micros tmr.read_us #define BUFSIZE 32768 FastCRC16 CRC16; uint16_t crc_xmodem(uint16_t crc, uint8_t data); uint16_t crc_xmodem(uint16_t polymian, uint16_t data); uint16_t buf[BUFSIZE] ; main() { uint32_t time; uint32_t crc; tmr.start(); printf("\nSystemCoreClock %d %s %s\n",SystemCoreClock,__TIME__,__DATE__); uint16_t polymian = 0x1021;uint8_t data[] = {0x75}; uint16_t data16[] = {0x75FA}; uint16_t size = sizeof(data16); time = micros(); crc = crc_xmodem(polymian,data16[0]); time = micros() - time; printf("Soft16bitCRC: crc: %x time: %d\n", crc, time); time = micros(); crc = CRC16.xmodem(polymian, data16[0]); time = micros() - time; printf("Hard16bitCRC: crc: %x time: %d\n", crc, time); printf("\nCRC Benchmark %d bytes\n",sizeof(buf)); //Fill array with data for (int i=0; i<BUFSIZE; i++) { buf[i] = (i+1) & 0xffff; } time = micros(); for (int i=0; i<BUFSIZE; i++) { crc = crc_xmodem(polymian, buf[i]); } time = micros() - time; printf("Soft16bitCRC: time: %dus\n", time); time = micros(); for (int i=0; i<BUFSIZE; i++) { crc = CRC16.xmodem(polymian, buf[i]); } time = micros() - time; printf("Hard16bitCRC: time: %dus\n", time); } uint16_t crc_xmodem(uint16_t polymian, uint8_t data) { unsigned int i; uint16_t crc = 0x0000; crc = crc ^ ((uint16_t)data << 8); for (i=0; i<8; i++) { if (crc & 0x8000) { crc = (crc << 1) ^ polymian; } else { crc <<= 1; } } return crc; } uint16_t crc_xmodem(uint16_t polymian, uint16_t data) { unsigned int i; uint16_t crc = 0x0000; crc = crc ^ data; for (i=0; i<16; i++) { if (crc & 0x8000) { crc = (crc << 1) ^ polymian; } else { crc <<= 1; } } return crc; }