RFID识别卡运用C语言进行曼彻斯特解码,请看看代码还有哪些可以改进的地方(C语言)

RFID识别后对所获信息进行识别,同时运用编码将所获信息进行曼彻斯特编码后进行展示解码后结果。


static rt_err_t _manchester_decode(rt_uint8_t *bit_buf, uint8_t (*pdata)[5])//曼彻斯特解码
{
    int i, j;
    rt_uint8_t *row = bit_buf + 9;
    rt_uint8_t data[5] = {0};
    rt_uint8_t chk;//初始化校验位
    rt_uint8_t chkerr = 0;
    rt_uint32_t tagid = 0;

    for (i = 0; i < 10; i++)//10行循环,costomer
    {
        chk = 0;//校验标志设为0
        for (j = 0; j < 5; j++)//设置5列
        {
            chk ^= row[i * 5 + j];//按位异或运算
            if (j < 4)
            {
                data[i >> 1] <<= 1;//数据位提取,左移1
                data[i >> 1] |= row[i * 5 + j];//进行或运算
            }
        }

        if (chk != 0)
        {
            chkerr = 1;
            rt_kprintf("LF data bit row[%d] checksum error:%d%d%d%d%d\n", i, row[i * 5], row[i * 5 + 1], row[i * 5 + 2], row[i * 5 + 3], row[i * 5 + 4]);
            //return;
        }
    }

    tagid = data[1];
    tagid <<= 8;
    tagid |= data[2];
    tagid <<= 8;
    tagid |= data[3];
    tagid <<= 8;
    tagid |= data[4];//进行拼接

    rt_kprintf("customer ID:0x%02X\n", data[0]);
    rt_kprintf("TAG ID:%010d\t%03d,%05d\n", tagid, data[2], (tagid & 0xFFFF));
    if (!chkerr)
    {
        if (pdata != NULL)
        {
            rt_memcpy(*pdata, data, 5);
        }
        return RT_EOK;
    }
    else
    {
        return -RT_ERROR;
    }
}