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  ,请问是什么原因?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
正点原子
1楼-- · 2019-10-11 19:52
你单步跟踪,对比两个代码,看看从第几个循环开始,出现数据不一致,就可以知道问题在哪里了。
allenhy
2楼-- · 2019-10-12 00:59
我是新手,刚学没几天
allenhy
3楼-- · 2019-10-12 05:37
正点原子 发表于 2017-3-13 15:36
你单步跟踪,对比两个代码,看看从第几个循环开始,出现数据不一致,就可以知道问题在哪里了。

我也想这么做的,但是VS一步步运行总是报错。。。。我还是多多学习吧,原子哥有时间的话能不能把我的代码运行一下看看,告诉我到底哪边出的问题
allenhy
4楼-- · 2019-10-12 07:06
正点原子 发表于 2017-3-13 15:36
你单步跟踪,对比两个代码,看看从第几个循环开始,出现数据不一致,就可以知道问题在哪里了。

找到原因了, sizeof(rs485buf)的结果是8,我直接改成6就好了,不过也是奇怪,为什么VS会得到不同的结果呢,,,,,,,
树上的龙猫
5楼-- · 2019-10-12 10:39
 精彩回答 2  元偷偷看……

一周热门 更多>