#1 楼主:求教,C51地址定义和范围的问题 贴子发表于:2008-11-14 16:51:44
请教各位大哥,51系列的单片机,看到以下程序 #define PBYTE ((unsigned char *)0x10000L) #define Addr1 PBYTE[0x01] unsigned char pdata * idata RPCBuf=&Addr1;
这几行代码是什么意思?能不能使用RPCBuf[]的数组
51系列的单片机地址范围不是到FFFFH吗(64K的片外地址空间) ,为什么第一行的代码是0x10000L?如果我定义的地址超出范围,会有什么问题?
#2 个人判断 高手指导 贴子回复于:2008-11-18 11:27:03
由于unsigned char *)0x10000L,没有xdata ,片内外统一编址,所以 PBYTE的地址为
0x10000-片内ram,这样可利用PBYTE[] 片外最后的ram空间。
小弟初学,可能有错,请各前辈批评指教阿。
#3 没写错? 贴子回复于:2008-11-19 23:12:27
0x10000L,表示PBYTE的绝对地址是在idata的0x00;
#define Addr1 PBYTE[0x01] // 在片内idata地址0x01处定义为变量Addr1,以后给这个变量赋值,就是给这个地址赋值
unsigned char pdata * idata RPCBuf=&Addr1; //在片内定义一个idata的指针RPCBuf指向变量Addr1
这几条能运行?怎么感觉怪怪的,idata的0x01不是通用寄存器吗
不知道说的对不对,好久没编程了,以上的内容楼主作个参考吧
|