先贴上程序
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; 之類的無作用的語句.