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

* 72297: keil c的指针问题?

   koji 
koji发表的帖子 

 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

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:急求锂电池电量显示电路和保护电路大虾,我找了一晚上的电量显示电路了,还不没有找到满意的,你能帮我设计
[下一篇帖子]:NDK晶振上海唐辉电子有限公司的竞争优势PPTC自恢复保险KDS晶振 钟振 大真