📄 drv_crc.c
字号:
#include "Typedef.h"
#include "Drv_Crc.h"
_U16 CrcTable[256];
void InitCrcTable( void )
{
/* CRC-CCITT 16 基于多项式 x^16+x^12+x^5+1,参考值 0x1021 */
#define CRC16_POLY 0x1021
_U16 i, j;
_U16 usValue;
for( i = 0; i < 256; i++ )
{
usValue = (_U16)(i << 8);
for( j = 0; j < 8; j++ )
{
if( ( usValue & 0x8000 ) != 0 )
{
usValue = (_U16)( usValue << 1 ) ^ CRC16_POLY;
}
else
{
usValue <<= 1;
}
}
CrcTable[i] = usValue;
}
return;
}
_U16 CalcCrc( _U8 *DataStartAddr, _U32 DataLen )
{
_U16 usCrc = 0;
/* CRC计算*/
while( DataLen-- != 0 )
{
usCrc = (_U16)( usCrc << 8 ) ^ CrcTable[ (_U16)( usCrc >> 8 ) ^ *DataStartAddr++ ];
}
return usCrc;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -