uint32_t reverse_32( uint32_t data )
{
asm("rbit r0,r0");
return data;
}
;
uint32_t crc32_ether( char *buf,
int len,
int clear )
{
uint32_t *p = (uint32_t*
) buf;
uint32_t crc, crc_reg;
if ( clear )
CRC_ResetDR( );
while ( len >=
4 )
{
crc_reg = CRC_CalcCRC( reverse_32( *p++
) );
len -=
4;
}
crc =
reverse_32( crc_reg );
if ( len )
{
CRC_CalcCRC( crc_reg );
switch ( len )
{
case 1:
crc_reg = CRC_CalcCRC( reverse_32( ( *p &
0xFF ) ^ crc ) >>
24 );
crc = ( crc >>
8 ) ^
reverse_32( crc_reg );
break;
case 2:
crc_reg = CRC_CalcCRC( reverse_32( ( *p &
0xFFFF ) ^ crc ) >>
16 );
crc = ( crc >>
16 ) ^
reverse_32( crc_reg );
break;
case 3:
crc_reg = CRC_CalcCRC( reverse_32( ( *p &
0xFFFFFF ) ^ crc ) >>
8 );
crc = ( crc >>
24 ) ^
reverse_32( crc_reg );
break;
}
}
return ~
crc;
}
转载于:https://www.cnblogs.com/shangdawei/p/4603948.html
相关资源:数据结构—成绩单生成器