keil c的指针问题?
在外部RAM里的0x1000位置开辟了N张卡的空间(每张卡占用4个字节,第1个字节是卡的状态标志,0x88表示有卡,其它则表示卡无效;后面3个字节表示卡本身的内码。)。实际上卡只存了2000张。
在以下函数前有个复制eeprom卡信息到外部RAM的函数,有多少张卡就复制多少张的信息,直到该卡的标志不是0x88。因为eeprom里只有2000张卡的信息,所以这个函数也就复制了2000卡的信息到外部RAM。
以下函数功能是从外部RAM中读出数据,如果该卡的标志为有效0x88,则打印出该卡的有效标志0x88和卡的内码。
bit savecard_updatawall(void)
{
uchar xdata *addr;
addr=0x1000;
for(k=0;k <6500;k++) //查SRAM中是否有已注册的卡
{
if(*ramaddr==0x88)
{
print(*ramaddr);
print(*(ramaddr+1));
print(*(ramaddr+2));
print(*(ramaddr+3));
}
ramaddr += 4;
}
}
按理来说,在该函数之前复制eeprom数据到外部RAM时,只复制到2000卡的信息,2000张卡以后的信息没有复制,对外部RAM来说,将它们读出来都应该是随机数,现在是该函数打印出来了6451个0x88,也就是2000张以后的卡的标志大部为是0x88,但2000张以后的卡的内码都是随机数。
不知道为什么会出现这种情况,对指针采取以上操作“uchar xdata *addr; addr=0x1000;”是否与“uchar xdata *addr = 0x1000”相同,前者赋指针地址初值的方式是否正确?
发表时间:2009年7月11日23:00:56