最近都是翻旧案子,所以不太忙,花时间把以前的问题做下回顾,不懂的地方做下实验,关于xdata做下记录吧!
1.code里关于xdata的理解
在code里,经常看到这样的写法(scRegs[(u16Addr)&0xFF]),如图:
现在就scRegs这个写法做下分析:
xdata是large存储类型,volatile是通过硬件来改变指针指向的内容。
如:#define scRegs ((unsigned char volatile xdata ) 0x2F00)
说明:定义 msRegs为指向xdata地址空间unsigned char数据类型指针(注意是指针!!),指针值为0x2F00。这样就可以直接用scRegs[Addr]或(scRegs+Addr)访问外部RAM了。至于 volatile的作用就是让编译器不至于优化掉它的操作,但是scRegs[Addr]的具体内容就要看0x2F00+Addr这个寄存器的位置里放的内容,这个要查芯片手册了。
eg.如:MEM_SCREAD_BYTE(SC0_CE)的解释
原型为:#define MEM_SCREAD_BYTE(u16Addr) (scRegs[(u16Addr)&0xFF]),
已知: