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

[复制链接]
1468|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 | 显示全部楼层
看下你的变量的数据类型的吧。。往往这个地方时需要注意的。。
smilingangel 发表于 2014-11-24 22:04 | 显示全部楼层
这个就不是很清楚了,先看看的吧。
firstblood 发表于 2014-11-26 22:24 | 显示全部楼层
帮着顶下的吧,,这个我还不很明白的。
 楼主| shuishuo615 发表于 2014-12-5 14:01 | 显示全部楼层
vivilzb1985 发表于 2014-11-23 19:59
看下你的变量的数据类型的吧。。往往这个地方时需要注意的。。

类型是unsigned char
 楼主| shuishuo615 发表于 2014-12-5 14:02 | 显示全部楼层
dirtwillfly 发表于 2014-11-20 21:53
另外,watch中看到的数据有时不是实时的,要刷新一下再看

rxno,至少在watch里面是没有变的,我是单步调试的
ltbytyn 发表于 2014-12-5 17:08 | 显示全部楼层
把j= i+6*(rxno-1)分解开来再走单步
elvsf2 发表于 2014-12-6 14:22 | 显示全部楼层
unsigned char j;
watch里面观察的是全局变量,而 j不是全局变量。你尝试下用内存查看变量j的变化
 楼主| shuishuo615 发表于 2015-1-22 09:35 | 显示全部楼层
谢谢几位的帮忙,我自己脑洞太大,在rxno幅值的时候用的是'0','1',所以是0x30,而不是0,脑子糊涂的时候,这些简单的问题都发现不了。
myqq12 发表于 2015-1-22 11:05 | 显示全部楼层
shuishuo615 发表于 2015-1-22 09:35
谢谢几位的帮忙,我自己脑洞太大,在rxno幅值的时候用的是'0','1',所以是0x30,而不是0,脑子糊涂的时候,这 ...

:lol
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

66

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部