找回密码
 立即注册
查看: 62|回复: 2

遍历AI8051u34k-64,为何xadata结果比32k还大?

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:114
  • 最近打卡:2025-08-04 09:35:37
已绑定手机

5

主题

114

回帖

951

积分

高级会员

积分
951
发表于 4 天前 | 显示全部楼层 |阅读模式
如题,在使用AI8051U前,被其32k的xdata震惊,于是使用绝对地址的访问方式进行访问,结果如下:

好奇之处在于:得到的结果比手册上写的32k稍微大一丢丢(应该原本的结果是0x8000)
下面是使用的程序代码部分:

                if(time_1s_flag == 1)
                {
                        u8 i;               
                        for(i = 0 ;i<5;i++)
                        {
                                *((unsigned char xdata *)addr) = data_cnt;
                                NOP(5);
                                read_cnt = *((unsigned char xdata *)addr);
                                NOP(5);
                               
                                if(data_cnt >= 255)
                                {
                                        data_cnt = 0x12;
                                }                               
                                addr++;
                                if( addr == 0x0080)
                                {
                                        addr = 0X0085;
                                }
                        }       
                        printf("addr's address: %p\n", &addr);
                        printf("addr bytes: 0x%lx 0x%lx 0x%lx 0x%lx\n",
                   *((unsigned char*)&addr + 0),  // 低字节
                   *((unsigned char*)&addr + 1),
                   *((unsigned char*)&addr + 2),
                   *((unsigned char*)&addr + 3)); // 高字节                       
                       
                        if(read_cnt == data_cnt)
                        {
                                printf("ok is data_cnt 0x%bx\n",data_cnt);
                                printf("addr is   0x%lx \n",addr);
                                data_cnt++;
                                if(data_cnt >= 255)
                                {
                                        data_cnt = 0x12;
                                }
                        }
                        else
                        {
                                printf("addr is error  %lx \n",addr);
                       
                        }
                        data_cnt++;                       
                        time_1s_flag = 0;
                        printf(" u8 dummy[4]  is %p  %p  %p %p \n",&dummy[0],&dummy[1],&dummy[2],&dummy[3],&dummy[4]);
                        printf(" u8 dummy[4]  is %bx  %bx  %bx %bx \n",dummy[0],dummy[1],dummy[2],dummy[3],dummy[4]);
                }

截图202508011036442978.jpg

使用代码部分.zip

91.97 KB, 下载次数: 2

祝大家少掉头发,身体健康,能够一个幸福的家
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:148
  • 最近打卡:2025-08-04 13:20:42

765

主题

1万

回帖

1万

积分

管理员

积分
18465
发表于 4 天前 | 显示全部楼层
2k edata + 32k xdata
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:114
  • 最近打卡:2025-08-04 09:35:37
已绑定手机

5

主题

114

回帖

951

积分

高级会员

积分
951
发表于 昨天 09:35 | 显示全部楼层
神*** 发表于 2025-8-1 17:28
2k edata + 32k xdata

收到,感谢
祝大家少掉头发,身体健康,能够一个幸福的家
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-5 03:47 , Processed in 0.112730 second(s), 61 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表