来源于TinyOS的Serial Message手册
/*======================================================
函数: CalculateCRC16
说明: 计算一段存储区的CRC16
入口: *Pointer -- 源指针
index -- 偏移量
count -- 计算长度
出口: 返回uint16型的CRC计算结果
========================================================*/
uint16 calcByte(uint16 crc, uint16 b)
{
uint16 i;
crc = crc ^ (uint16)b << 8;
for ( i = 0; i < 8; i++)
{
if ((crc & 0x8000) == 0x8000)
{
crc = crc << 1 ^ 0x1021;
}
else
{
crc = crc << 1;
}
}
return crc & 0xffff;
}
uint16 CalculateCRC16(void *Pointer, uint16 index, uint16 count)
{
uint16 crc = 0;
uint8 *dp;
dp = (uint8 *)Pointer;
while (count > 0)
{
crc = calcByte(crc, dp[index++]);
count--;
}
return crc;
}
文章评论(0条评论)
登录后参与讨论