經過測試:
------------------------
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 大小為啥我可以把地址定義超過空間大?地址跟內存大小無關嗎? |