导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→keil c的指针问题?[koji]

 *第45629篇: keil c的指针问题?

  
楼 主:koji 2009年7月11日23:00
 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”相同,前者赋指针地址初值的方式是否正确?


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:深圳单片机学习技术交流群68715458一起交流[原创]

[下一篇主题]:NDK晶振上海唐辉电子有限公司的竞争优势