一次在数据处理时内存数据被迫刷新问题,定义了两个结构体变量 u8 A,u8 B。这两个变量是顺序定义的,那在内存中的地址也是相连的,A 内存为1K,B内存为600b,他们都从同一个地址拷贝数据。当我调试时发现,每当我收到变量A拷贝数据时B 变量的数据也被刷新一次。
#define CopyDataNum 2000 //拷贝数据量
pData[CopyDataNum];
u8*pt;
case 1:
pt = &A;
for(i=0;i<CopyDataNum;i++)
{
pt++=pData[i];
}
break;
case 2:
pt = &B;
for(i=0;i<CopyDataNum;i++)
{
pt++=pData[i];
}
break;
有经验的人一看就能看出来for那里都已经内存溢出了,因每次都拷贝了2K的内容,而A 和B内存大小只是1K和600b,所以每次拷贝上一个数据都会因为溢出把下一个数据也刷新了一边。
修改如下就可以解决问题了。
case 1:
pt = &A;
for(i=0;i<siezof(A);i++)
{
pt++=pData[i];
}
break;
case 2:
pt = &B;
for(i=0;i<siezof(A);i++)
{
pt++=pData[i];
}
break;