- 打卡等级:常住居民III
- 打卡总天数:114
- 最近打卡:2025-08-04 09:35:37
已绑定手机
高级会员
- 积分
- 951
|
如题,在使用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]);
}
|
|