请教CRC-ITU查表法

[复制链接]
 楼主| wsdcl 发表于 2008-3-6 10:13 | 显示全部楼层 |阅读模式
看了很多篇关于CRC的**,关于CRC-ITU查表法有点糊涂。&nbsp;<br /><br />《CRC算法原理及C语言实现》&nbsp;<br />http://www.laogu.com/wz_2713.htm&nbsp;<br />unsigned&nbsp;int&nbsp;crc_ta[256]={&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;CRC余式表&nbsp;*/&nbsp;<br />0x0000,&nbsp;0x1021,&nbsp;0x2042,&nbsp;0x3063,&nbsp;0x4084,&nbsp;0x50a5,&nbsp;0x60c6,&nbsp;0x70e7。。。。&nbsp;<br />此文中的CRC-ITU余式表很好理解,是根据多项式&nbsp;x16+x12+x5+1&nbsp;即&nbsp;1021&nbsp;计算得来,笔算也没错。&nbsp;<br /><br />《CRC算法与实现》&nbsp;<br />http://www.bloghome.cn/posts/6741.html&nbsp;<br />//&nbsp;CRC-ITU查找表&nbsp;<br />const&nbsp;u16&nbsp;crctab16[]&nbsp;=&nbsp;&nbsp;<br />{0x0000,&nbsp;0x1189,&nbsp;0x2312,&nbsp;0x329b,&nbsp;0x4624,&nbsp;0x57ad,&nbsp;0x6536,&nbsp;0x74bf。。。。&nbsp;<br />此文中的余式表为什么与上面的不同?这是为什么?是因为采用了不同的多项式吗?&nbsp;
chunyang 发表于 2008-3-6 10:25 | 显示全部楼层

不要用查表这样的笨办法

去看看我的Blog,有很简单的CRC计算法。
xwj 发表于 2008-3-6 10:28 | 显示全部楼层

lz,因为多项式不同

或者移位方向不同...<br /><br /><br /><br />
 楼主| wsdcl 发表于 2008-3-6 10:35 | 显示全部楼层

to chunyang

实际上我是用在一个温度传感器的MODBUS协议里,以前一直都是自定义的规约,这次老板有要求,要用标准MODBUS协议。<br /><br />由于传输的内容比较多,所以准备采用MODBUS&nbsp;RTU,但是CRC理解一直不是很透彻。<br /><br />芯片剩余空间还很多,查表法是不是更好点呢?<br /><br />另外chunyang大哥,您的BLOG里能不能直接给个链接?好象不能搜索来着
 楼主| wsdcl 发表于 2008-3-6 10:37 | 显示全部楼层

x16+x12+x5+1

标准CRC-ITU的多项式也可以是不同的吗?<br />不是这样的吗?x16+x12+x5+1<br />
chunyang 发表于 2008-3-6 10:55 | 显示全部楼层

不同CRC标准的生成多项式不同

链接地址如下: <br /> 相关链接:<a href='http://blog.21ic.com/user1/67/36696.html'>http://blog.21ic.com/user1/67/36696.html</a>
 楼主| wsdcl 发表于 2008-3-6 11:00 | 显示全部楼层

十分感谢

十分感谢,马上去拜读!
 楼主| wsdcl 发表于 2008-3-6 14:20 | 显示全部楼层

请教chunyang

MODBUS&nbsp;RTU方式下,识别一帧开始是以当前波特率下的三个半字符时间的静默来判断。<br />这个3.5字符时间如何来识别?有什么好的思路吗?
chunyang 发表于 2008-3-6 16:28 | 显示全部楼层

当前帧结束后启动定时器

定时器溢出设标志,根据标志判断即可。也可用帧头特征比对法。
bhsdlmj 发表于 2009-10-15 08:43 | 显示全部楼层
去看看我的Blog,有很简单的CRC计算法。
chunyang 发表于 2008-3-6 10:25



同意查表法 真是笨!!! 我弄了这么长时间,也不敢确定哪个查表法是绝对的正确!

打算放弃用查表法了!!!
hotpower 发表于 2015-9-27 12:56 来自手机 | 显示全部楼层
左移CRC16=X16+X12+X8+X7+X3+1
hotpower 发表于 2015-9-27 12:58 来自手机 | 显示全部楼层
//CRC位域4表(大端): const unsigned int CRCL16_1189_Table[16] = {   0x0000,0x1189,0x2312,0x329B,0x4624,0x57AD,0x6536,0x74BF,0x8C48,0x9DC1,0xAF5A,0xBED3,0xCA6C,0xDBE5,0xE97E,0xF8F7 };
hotpower 发表于 2015-9-27 13:00 来自手机 | 显示全部楼层
http://www.21ic.com/tools/HotWC3_V1.11.html
hotpower 发表于 2015-9-27 13:00 来自手机 | 显示全部楼层
表格中的1189就是权值!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

15

帖子

1

粉丝
快速回复 返回顶部 返回列表