TI中文支持网
TI专业的中文技术问题搜集分享网站

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

先贴上程序
                        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才达到目的
但还是想找到原因。。。哪里出了问题

Ken Wang:

我试过上面的程序,确实如果当j作为局部变量的时候,它在执行  j= i+6*(rxno-1);之前,在变量观察窗口会看到一个数值,但是当你执行完这条语句后,应该是得到正确的数据的。为了避免这一现象,你可以把j定义为全局变量,并且初始化,这样可以避免这样的现象。

谢谢

Lichen Wang:

回复 Ken Wang:

Ken Wang

… 在执行  j= i+6*(rxno-1);之前,在变量观察窗口会看到一个数值,但是当你执行完这条语句后,应该是得到正确的数据的。为了避免这一现象,你可以把j定义为全局变量,并且初始化,这样可以避免这样的现象。

我認為一般而言, 執行前的數值和執行後的數值, 應該不一樣. 如果你想它前後一樣, 可以改寫成: j = j; 或者 j = j + 1 – 1; 之類的無作用的語句.

赞(0)
未经允许不得转载:TI中文支持网 » msp430中一个简单的数值运算出现的奇怪问题
分享到: 更多 (0)