大家一般情况下用哪种CRC校验多项式?

[复制链接]
15584|53
 楼主| bhsdlmj 发表于 2009-10-9 14:20 | 显示全部楼层 |阅读模式
各种码对比一下,优点是啥?
多选投票: ( 最多可选 4 项 ), 共有 13 人参与投票 查看投票参与人

投票已经结束

0.00% (0)
53.85% (7)
30.77% (4)
15.38% (2)
您所在的用户组没有投票权限
 楼主| bhsdlmj 发表于 2009-10-9 14:28 | 显示全部楼层
我听说别人用CRC-16 我就也打算学这个
ZRL700424 发表于 2009-10-9 15:22 | 显示全部楼层
都不用,用CRC8
 楼主| bhsdlmj 发表于 2009-10-9 15:50 | 显示全部楼层
有用查表的?有用计算的?

大家用哪个种?
 楼主| bhsdlmj 发表于 2009-10-9 16:34 | 显示全部楼层
这么重要的东西难道都没有人关注么????都在弄什么呢??:Q
ZRL700424 发表于 2009-10-9 16:36 | 显示全部楼层
一般都用查表,计算太慢了
 楼主| bhsdlmj 发表于 2009-10-9 16:58 | 显示全部楼层
有多慢???
ZRL700424 发表于 2009-10-9 17:03 | 显示全部楼层
有多慢???
bhsdlmj 发表于 2009-10-9 16:58


不同的单片机不同,你写个程序仿真一下不就知道了?
 楼主| bhsdlmj 发表于 2009-10-9 17:06 | 显示全部楼层
CRC16 怎么写?关键是我不会写》????

帮我写个!! 多谢!!!哈哈
ZRL700424 发表于 2009-10-9 17:14 | 显示全部楼层
本帖最后由 ZRL700424 于 2009-10-9 17:16 编辑

//单独计算某个值的16位CRC值
unsigned int crc_cal(unsigned char data);
unsigned int crc;
void main(void)
{
        crc=0;        //crc初值
        crc=crc_cal(3);
  while(1);
}

unsigned int crc_cal(unsigned char data)        
{
        unsigned char i;
                for(i=0x80;i!=0;i>>=1)
                {
                        if((crc&0x8000)!=0)
                        {
                                crc<<=1;
                                crc^=0x1021;
                        }
                        else
                        crc<<=1;
                        if((data&i)!=0)
                        crc^=0x1021;
                }
        return(crc);
}
ZRL700424 发表于 2009-10-9 17:16 | 显示全部楼层
//计算一组数据的16位CRC
unsigned char crc_buff[]=
{
        0x01,0X02,0X03,0X04,0X05
};

//======================================
unsigned int crc_cal(unsigned char *ptr,unsigned char len);

void main(void)
{
        unsigned char *ptr;
        crc=0;        //crc初值
        ptr=crc_buff;        //指向第一个数据
        crc=crc_cal(ptr,5);       
  while(1);
}

unsigned int crc_cal(unsigned char *ptr,unsigned char len)        //prt为数据指针,len为数据长度
{
        unsigned char i;
        while(len--)
        {
                for(i=0x80;i!=0;i>>=1)
                {
                        if((crc&0x8000)!=0)
                        {
                                crc<<=1;
                                crc^=0x1021;
                        }
                        else
                        crc<<=1;       
                        if((*ptr&i)!=0)
                        crc^=0x1021;
                }       
                ptr++;
        }
        return(crc);
}
zhangzaiqi 发表于 2009-10-9 19:31 | 显示全部楼层
天哪,我咋看不懂...
chunyang 发表于 2009-10-9 19:37 | 显示全部楼层
这还搞个投票?做标准产品或需要与他人产品互联或替代,那么就只能选择特定的CRC生成多项式,如果是自己的独立产品,则可以自行选定,甚至在某种标准上加以变化,以具体应用为导向。
wi2c 发表于 2009-10-9 20:28 | 显示全部楼层
都不用,用CRC8
ZRL700424 发表于 2009-10-9 15:22


而且是查表的
呵呵

非常同意春阳,首先要搞清楚为什么要搞这么个玩意儿
很多人到最后舍本逐末,都不知道自己要干什么了
gongxd126com 发表于 2009-10-9 20:38 | 显示全部楼层
checksum
 楼主| bhsdlmj 发表于 2009-10-10 08:23 | 显示全部楼层
都不要急!!!我研究研究!!再讲给你听
 楼主| bhsdlmj 发表于 2009-10-10 08:23 | 显示全部楼层
天哪,我咋看不懂...
zhangzaiqi 发表于 2009-10-9 19:31



不要急!!!我研究研究!!再讲给你听
想出国打工 发表于 2009-10-10 08:59 | 显示全部楼层
共同约定一个多项式,加上crc 可以整除
的原理;计算挺麻烦的;一般的话,checksum 就够用了吧;
 楼主| bhsdlmj 发表于 2009-10-10 09:15 | 显示全部楼层
checksum啥意思???:L
 楼主| bhsdlmj 发表于 2009-10-10 09:15 | 显示全部楼层
得用手算一算才好啊!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

351

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部