经过测试:
------------------------
u8 code gCode[256] _at_ 0x3A00;
u8 xdata gXRam[256] _at_ 0x5000;
*gXRam = 6;
printf("%p\n", gXRam);
printf("%bd\n", *gXRam);
printf("%p\n", gCode);
*((u8 xdata *)gCode) = 5;
printf("%p\n", (u8 xdata *)gCode);
printf("%bd\n", *gCode);
printf("%bd\n", *((u8 xdata *)gCode));
-----------------------------
软件是 keil5,编译没有错误警告,单片机为 C8051F340。
串口打印结果为:
x:5000
6
c:3a00
x:3a00
-1
5
--------------------------
code定义的代码貌似可以转换为xdata,然后起始地址的值好像没有改变。
有个疑问就是是 C8051F340 的 RAM 只有 256字节+4KB 大小为啥我可以把地址定义超过空间大小?地址跟内存大小无关吗? |