Ly-Cycle计划在挪威新建锂离子电池回收工厂
06-08
// CRC16校验在通信中应用广泛。
其理论在此不予讨论。
// 仅测试三种常见的实现方法。
方法1采用常见的查找表方法,类似于word//section、word等查找表。

至于查找表的生成,我们这里也略过。
//---------------- 流行多项式----------------//CCITT:x^16 + x^12 + x^ 5 + x^0(0x)//CRC-16:x^16 + x^15 + x^2 + x^0(0x)#defineCRC_16_POLYNOMIALS0x// -------------- ----------------------------------------------------// CRC16计算方法1:使用校验2 长度表 // ---------------------------------- ---------- ----------------const BYTE chCRCHTalbe[] =// CRC高字节值表 {0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80、0x41、0x00、0xC1、0x81、0x40、0x01、0xC0、0x80、0x41、0x00、0xC1、0x81、0x40、0x00、0xC1、0x81、0x40、0x01、0xC0、 0、0x41、0x01、0xC0、0x80、 0x41,0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 1、0x01、0xC0、0x80、0x41、 0x00、0xC1、0x81、0x40、0x01、0xC0、0x80、0x41、0x00、0xC1、0x81、0x40、0x00、0xC1、0x81、0x40、0x01、0xC0、0x80、0x41、 00、0xC1、0x81、0x40、0x01、 0xC0、0x80、0x41、0x01、0xC0、0x80、0x41、0x00、0xC1、0x81、0x40、0x00、0xC1、0x81、0x40、0x01、0xC0、0x80、0x41、0x01、0xC0、0x80、0x41、0x00、0xC1、0x81、0x40、0x01、0xC0、0x80、0x41、0x00、0xC1、0x81、0x40、0x00、0xC1、0x81、0x40、0 x01、0xC0、0x80、0x41、 0x01、0xC0、0x80、0x41、0x00、0xC1、0x81、0x40、0x00、0xC1、0x81、0x40、0x01、0xC0、0x80、0x41、0x00、0xC1、0x81、0x40、 、0xC0、0x80、0x41、0x01、 0xC0、0x80、0x41、0x00、0xC1、0x81、0x40、0x00、0xC1、0x81、0x40、0x01、0xC0、0x80、0x41、0x01、0xC0、0x80、0x41、0x00、 、0x81、0x40、0x01、0xC0、 0x80、0x41、0x00、0xC1、0x81、0x40、0x00、0xC1、0x81、0x40、0x01、0xC0、0x80、0x41、0x00、0xC1、0x81、0x40、0x01、0xC0、 、0x41、0x01、0xC0、0x80、 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 、0x01、0xC0、0x80、0x41、 0x00、0xC1、0x81、0x40、0x00、0xC1、0x81、0x40、0x01、0xC0、0x80、0x41、0x00、0xC1、0x81、0x40、0x01、0xC0、0x80、0x41、 1、0xC0、0x80、0x41、0x00、 0xC1, 0x81, 0x40};const BYTE chCRCLTalbe[] =// CRC 低位字节值表{0x00, 0xC0, 0xC1,0x01、0xC3、0x03、0x02、0xC2、0xC6、0x06、0x07、0xC7、0x05、0xC5、0xC4、0x04、0xCC、0x0C、0x0D、0xCD、0x0F、0xCF、0xCE、0x 0A、0xCA、0xCB、0x0B、 0xC9、0x09、0x08、0xC8、0xD8、0x18、0x19、0xD9、0x1B、0xDB、0xDA、0x1A、0x1E、0xDE、0xDF、0x1F、0xDD、0x1D、0x1C、0xDC、0x14、 、0xD5、0x15、0xD7、 0x17、0x16、0xD6、0xD2、0x12、0x13、0xD3、0x11、0xD1、0xD0、0x10、0xF0、0x30、0x31、0xF1、0x33、0xF3、0xF2、0x32、0x36、0xF6 、0xF7、0x37、0xF5、0x35、 0x34、0xF4、0x3C、0xFC、0xFD、0x3D、0xFF、0x3F、0x3E、0xFE、0xFA、0x3A、0x3B、0xFB、0x39、0xF9、0xF8、0x38、0x28、0xE8、0xE9、 、0xEB、0x2B、0x2A、 0xEA、0xEE、0x2E、0x2F、0xEF、0x2D、0xED、0xEC、0x2C、0xE4、0x24、0x25、0xE5、0x27、0xE7、0xE6、0x26、0x22、0xE2、0xE3、0x23、 1、0x21、0x20、0xE0、 0xA0、0x60、0x61、0xA1、0x63、0xA3、0xA2、0x62、0x66、0xA6、0xA7、0x67、0xA5、0x65、0x64、0xA4、0x6C、0xAC、0xAD、0x6D、0xAF、0 x6F、0x6E、0xAE、0xAA、 0x6A、0x6B、0xAB、0x69、0xA9、0xA8、0x68、0x78、0xB8、0xB9、0x79、0xBB、0x7B、0x7A、0xBA、0xBE、0x7E、0x7F、0xBF、0x7D、0xBD、0xBC、0x7C、0xB4、0x74、0x75、0xB5、0x77、0xB7、0xB6、0x76、0x72、0xB2、 0x73、0xB1、0x71、 0x70、0xB0、0x50、0x90、0x91、0x51、0x93、0x53、0x52、0x92、0x96、0x56、0x57、0x97、0x55、0x95、0x94、0x54、0x9C、0x5C、 、0x9D、0x5F、0x9F、0x9E、 0x5E、0x5A、0x9A、0x9B、0x5B、0x99、0x59、0x58、0x98、0x88、0x48、0x49、0x89、0x4B、0x8B、0x8A、0x4A、0x4E、0x8E、0x8F、 、0x8D、0x4D、0x4C、0x8C、 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83,0x41, 0x81, 0x80, 0x40};WORD CRC16_1(BYTE* pchMsg, WORD wDataLen){ BY TE chCRCHi = 0xFF; //高CRC字节初始化 BYTE chCRCLo = 0xFF; // CRC 低字节初始化 WORD wIndex; // CRC 循环中的索引 while (wDataLen--){// 计算 CRCwIndex = chCRCLo ^ *pchMsg++ ;chCRCLo = chCRCHi ^ chCRCHTalbe [wIndex];chCRCHi = chCRCLTalbe[wIndex] ;}return ((chCRCHi > 4);wCRC = wCRCTalbeAbs[((chChar >> 4) ^ wCRC) & 15] ^ (wCRC >> 4);}return wCRC;} //-------------------- ---------------------------- ----------------//CRC16计算方式3:使用直接结算方式// ---------------------------------------------- - ---------------------------------WORD CRC16_3(BYTE* pchMsg, WORD wDataLen){BYTE i, chChar; WORD wCRC = 0xFFFF;while (wDataLen--){chChar = *pchMsg++;chChar = ByteInvert(chChar);wCRC ^= (((WORD) chChar) for (i = 0; i {if (wCRC & 0x)wCRC = (wCRC elsewCRC }}wCRC = WordInvert(wCRC); return wCRC;}//测试数据: //在DSP56F80x平台上使用Metrowerks CodeWarrior,对这三种方法的性能 // 进行了测试 // ------ - ------------------------------------------------- - -------//代码大小(字) 附加存储空间(字) 执行时间(周期数)//------------------------ -------------------------------------------------- //方法0//方法0//方法*8////说明:方法3的代码量还包括字反转和字节反转程序(这里不给出源代码)////结论:通常当存储空间没有限制,使用方法1是最好的,毕竟在通讯中,保证通讯速度至关重要,而方法2也是一个不错的方法,而且占用空间很少,方法3。
似乎没有什么优势。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-08
06-17
06-18
06-18
06-21
06-06
06-17
06-18
06-17
最新文章
使用电子管有哪些注意事项?如何检查电子管之间是否短路?
博通支付1200万美元和解SEC财务欺诈指控
八名运营商高管确认加入虚拟运营商
内蒙古农牧区雷电灾害成因分析及防雷对策
北京联通将5G应用于世园会远程医疗急救
TD-SCDMA最后一轮冲刺测试启动,产业前景更加光明
专访阿里云总裁王健:云计算服务平台梦想成真
USB2.0控制器CY7C68013的接口设计与实现