新闻中心

EEPW首页>嵌入式系统>设计应用> CRC位域单表查表及建表方法

CRC位域单表查表及建表方法

作者: 时间:2016-12-02 来源:网络 收藏
CRC位域8每表256个元素,适合以字节为存储单位,故程序的入口参数用数组即表指针替代,如:
网上的左移CRC16查表核心程序为(crcbuff为大端存储模式):
unsigned int GetCRCL16(unsigned int crcinit, unsigned char *crcbuff)
{//(可以不要初值crcinit,多字节CRC16时入口需要对crcval做处理)
unsigned int i, crc=0;
for(i = 0;i < 2;i ++)//2个字节位域8只需要2次完成
{
crc = (crc << 8) ^ CRCL16_Col[(((crcinit ^ crc) >> 8) ^ *crcbuff++) & 0xFF];//位域宽8单表256个字节
crcinit <<= 8;//下一位域的初值
}
return crc;
}
网上的右移CRC16查表核心程序为(crcbuff为小端存储模式):
unsigned int GetCRCR16(unsigned int crcinit, unsigned char *crcbuff)
{//(可以不要初值crcinit,多字节CRC16时入口需要对crcval做处理)
unsigned int i, crc=0;
for(i = 0;i < 2;i ++)//2个字节位域8只需要2次完成
{
crc = (crc >> 8) ^ CRCR16_Col[((crcinit ^ crc) ^ *crcbuff++) & 0xFF];//位域宽8单表256个字节
crcinit >>= 8;//下一位域的初值
}
return crc;
}
网上的左移CRC32查表核心程序为(crcbuff为大端存储模式):
unsigned long GetCRCL32(unsigned long crcinit, unsigned char *crcbuff)
{//(可以不要初值crcinit,多字节CRC32时入口需要对crcval做处理)
unsigned long i, crc=0;
for(i = 0;i < 4;i ++)//4个字节位域8只需要4次完成
{
crc = (crc << 8) ^ CRCL32_Col[(((crcinit ^ crc) >> 24) ^ *crcbuff++) & 0xFF];//位域宽8单表256个字节
crcinit <<= 8;//下一位域的初值
}
return crc;
}
网上的右移CRC32查表核心程序为(crcbuff为小端存储模式):
unsigned long GetCRCR32(unsigned long crcinit, unsigned char *crcbuff)
{//(可以不要初值crcinit(一般为0或0xFFFFFFFF),多字节CRC32时入口需要对crcval做处理)
unsigned long i, crc=0;
for(i = 0;i < 4;i ++)//4个字节位域8只需要4次完成
{
crc = (crc >> 8) ^ CRCR32_Col[((crcinit ^ crc) ^ *crcbuff++) & 0xFF];//位域宽8单表256个字节
crcinit >>= 8;//下一位域的初值
}
return crc;
}
CRC位域单表查表方法可以应用于任何CRC查表方法,它结合了传统的移位算法和查表方法的各自优点,
充分考虑了空间和速度之间的关系,对小容量及速度要求的单片机特别适用。
由于位域可等长或不等长,故将可派生为更多“稀有”的查表方法,对加密算法比较有用。
像CRC10,CRC12这种“非字节”存储的CRC查表,可用位域2(CRC10)及位域3和位域4位域6等方法。
总之位域4是更为普遍的压缩CRC表格的好方法,位域宽度大则循环次数少速度更快。
网上流行的一般为位域8,自然速度最快,但表格空间最大。
本文给出了如何建立数组及查表程序及相应的移位算法程序,这里不是“比拼”,而是探讨更多的查表方法。
此法是菜农多年对CRC研究的结果和总结。
具体应用:
CRC64ISO(d800000000000000)的16四字表长查表程序
CRC64ECMA(42F0E1EBA9EA3693)的16四字表长查表程序
CRC32IEEE(EDB88320)的16双字表长查表程序
CRC16CCITT(1021)的16字表长查表程序
CRC-16-IBM(A001)的16字表长查表程序
1-Wire中CRC8的16字节表长查表程序
SMBUS中PEC(CRC)16字节表长查表程序
本文计算工具:[url=http://[color=]
菜农HotPower@126.com 2009.10.18 于雁塔菜地
上一页 1 2 3 下一页

评论


技术专区

关闭