485,CRC校验,同样的程序,VS运行出来的结果是对的,Keil运行结果不对,请大家帮我看看是什么原因

2019-10-11 16:33发布

下面是程序:[mw_shl_code=cpp,true]

unsigned char * data;
unsigned char length;
//此函数将回传 unsigned integer 型态的 CRC 值。
unsigned int crc_chk(unsigned char * data, unsigned char length) {
        int j;
        unsigned int crc_reg = 0xFFFF;
        while
                (length--)
        {
                crc_reg ^= *data++;
                for (j = 0; j<8; j++)
                {
                        if(crc_reg & 0x01)
                        {
                                crc_reg = (crc_reg >> 1) ^ 0xA001;
                        }
else {
        crc_reg= crc_reg>>1;
}
                }
        }
        return crc_reg;
}

[/mw_shl_code]

使用VS,运行结果是29,38 没问题。
keil:[mw_shl_code=cpp,true]unsigned int crcData;
   u8 rs485buf[8];         
         rs485buf[0]=0x01;
   rs485buf[1]=0x06;
   rs485buf[2]=0x00;
   rs485buf[3]=0x67;
   rs485buf[4]=0x00;
         rs485buf[5]=0x50;
         crcData=crc_chk(rs485buf, sizeof(rs485buf));
         rs485buf[6]=crcData&0xff;
         rs485buf[7]=crcData>>8; [/mw_shl_code]

运行结果是C6D3  ,请问是什么原因?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。