CRC16的计算函数


//CRC16_MODBUS
uint16_t cal_CRC16(const uint8_t* p_data, uint32_t size)
{
    uint16_t crc = 0xFFFF;
    for (int pos = 0; pos < size; pos++)
    {
        crc ^= (uint16_t)p_data[pos]; // XOR byte into least sig. byte of crc
        for (int i = 8; i != 0; i--)   // Loop over each bit
        {
            if ((crc & 0x0001) != 0)   // If the LSB is set
            {
                crc >>= 1; // Shift right and XOR 0xA001
                crc ^= 0xA001;
            }
            else // Else LSB is not set
            {
                crc >>= 1;    // Just shift right
            }
        }
    }
 
    crc = ((crc & 0x00ff) << 8) | ((crc & 0xff00) >> 8);
 //DBG_printf("%s crc = 0x%04x\n", __func__, crc);
    return crc;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值