OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2946|回复: 5

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

[复制链接]

2

主题

6

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2017-2-11
在线时间
17 小时
发表于 2017-3-13 15:36:51 | 显示全部楼层 |阅读模式
1金钱
下面是程序:[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  ,请问是什么原因?
捕获.JPG

最佳答案

查看完整内容[请看2#楼]

你单步跟踪,对比两个代码,看看从第几个循环开始,出现数据不一致,就可以知道问题在哪里了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2017-3-13 15:36:52 | 显示全部楼层
你单步跟踪,对比两个代码,看看从第几个循环开始,出现数据不一致,就可以知道问题在哪里了。
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2017-2-11
在线时间
17 小时
 楼主| 发表于 2017-3-13 15:37:45 | 显示全部楼层
我是新手,刚学没几天
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2017-2-11
在线时间
17 小时
 楼主| 发表于 2017-3-13 21:16:07 | 显示全部楼层
正点原子 发表于 2017-3-13 15:36
你单步跟踪,对比两个代码,看看从第几个循环开始,出现数据不一致,就可以知道问题在哪里了。

我也想这么做的,但是VS一步步运行总是报错。。。。我还是多多学习吧,原子哥有时间的话能不能把我的代码运行一下看看,告诉我到底哪边出的问题
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2017-2-11
在线时间
17 小时
 楼主| 发表于 2017-3-13 21:35:15 | 显示全部楼层
正点原子 发表于 2017-3-13 15:36
你单步跟踪,对比两个代码,看看从第几个循环开始,出现数据不一致,就可以知道问题在哪里了。

找到原因了, sizeof(rs485buf)的结果是8,我直接改成6就好了,不过也是奇怪,为什么VS会得到不同的结果呢,,,,,,,
回复

使用道具 举报

7

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
409
金钱
409
注册时间
2016-7-5
在线时间
65 小时
发表于 2017-3-14 17:13:09 | 显示全部楼层
allenhy 发表于 2017-3-13 21:35
找到原因了, sizeof(rs485buf)的结果是8,我直接改成6就好了,不过也是奇怪,为什么VS会得到不同的结果 ...

我猜是因为编译环境不同吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-9 13:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表