打印

MCU中一个简单的数值运算出现的奇怪问题

[复制链接]
1142|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shuishuo615|  楼主 | 2014-11-20 14:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
先贴上程序
                        unsigned char i;
                        for(i=0;i<6;i++)
                           {
                                   unsigned char j;
                                   j= i+6*(rxno-1);
                                   ClusterData[j] = RxBuf[i];
                           }
问题描述:
断点设置在j= i+6*(rxno-1);此句上
rxno=3;
i=1;
执行完j= i+6*(rxno-1);从watch中看j=45,按理说应该是13,差了32
执行完ClusterData[j] = RxBuf[i];后j变成了需要的13
然后i=2
执行完j= i+6*(rxno-1);从watch中看j=46,按理说应该是14,差了32
执行完ClusterData[j] = RxBuf[i];后j变成了需要的14
依次类推。。。
最后无奈只有把语句改成j= i+6*(rxno-1)-32才达到目的
但还是想找到原因。。。哪里出了问题

相关帖子

沙发
dirtwillfly| | 2014-11-20 21:53 | 只看该作者
在前面代码里找找,是不是rxno被改变了?

使用特权

评论回复
板凳
dirtwillfly| | 2014-11-20 21:53 | 只看该作者
另外,watch中看到的数据有时不是实时的,要刷新一下再看

使用特权

评论回复
地板
vivilzb1985| | 2014-11-23 19:59 | 只看该作者
看下你的变量的数据类型的吧。。往往这个地方时需要注意的。。

使用特权

评论回复
5
smilingangel| | 2014-11-24 22:04 | 只看该作者
这个就不是很清楚了,先看看的吧。

使用特权

评论回复
6
firstblood| | 2014-11-26 22:24 | 只看该作者
帮着顶下的吧,,这个我还不很明白的。

使用特权

评论回复
7
shuishuo615|  楼主 | 2014-12-5 14:01 | 只看该作者
vivilzb1985 发表于 2014-11-23 19:59
看下你的变量的数据类型的吧。。往往这个地方时需要注意的。。

类型是unsigned char

使用特权

评论回复
8
shuishuo615|  楼主 | 2014-12-5 14:02 | 只看该作者
dirtwillfly 发表于 2014-11-20 21:53
另外,watch中看到的数据有时不是实时的,要刷新一下再看

rxno,至少在watch里面是没有变的,我是单步调试的

使用特权

评论回复
9
ltbytyn| | 2014-12-5 17:08 | 只看该作者
把j= i+6*(rxno-1)分解开来再走单步

使用特权

评论回复
10
elvsf2| | 2014-12-6 14:22 | 只看该作者
unsigned char j;
watch里面观察的是全局变量,而 j不是全局变量。你尝试下用内存查看变量j的变化

使用特权

评论回复
11
shuishuo615|  楼主 | 2015-1-22 09:35 | 只看该作者
谢谢几位的帮忙,我自己脑洞太大,在rxno幅值的时候用的是'0','1',所以是0x30,而不是0,脑子糊涂的时候,这些简单的问题都发现不了。

使用特权

评论回复
12
myqq12| | 2015-1-22 11:05 | 只看该作者
shuishuo615 发表于 2015-1-22 09:35
谢谢几位的帮忙,我自己脑洞太大,在rxno幅值的时候用的是'0','1',所以是0x30,而不是0,脑子糊涂的时候,这 ...

:lol

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

66

帖子

0

粉丝