((unsigned char volatile code *) 零) 和((unsigned char volatile xdata *) 0)
((unsigned char volatile code *) 0) 和((unsigned char volatile xdata *) 0)
((unsigned char volatile code *) 0) 和((unsigned char volatile xdata *) 0)
对于上面两条语句,是否在某种条件下,可以
((unsigned char volatile code *) (0)) =((unsigned char volatile xdata *) 0) ;具体有什么区别,能不能举个实例说明,谢谢
------解决方案--------------------
可以,两个地址的转换
------解决方案--------------------
1.
#define XBYTE ((unsigned char volatile xdata *) 0)
定义 XBYTE 为 指向 xdata 地址空间unsigned char 数据类型的指针,指针值为0 这样,可以直接用XBYTE[0xnnnn]或*(XBYTE+0xnnnn)访问外部RAM了。xdata 是 0 to 65535 范围内的一个 xdata 存储器
xdata ---> 可寻址片外ram (64k 地址范围)以 MOVX @DPTR 存取的外部数据存储器
2.
#define CBYTE ((unsigned char volatile code *) 0)
和上面的道理类似,不过code 是在 0000H .. 0FFFFH 之间的一个代码地址
code ---> 程序存储区 (64k 地址范围),以 MOVC @A+DPTR 读取的程序内存
我觉得,code xdata类型都是2Byte,也就说上面的两个指针,每次解引用,都是访问了2个字节。
区别是,他们的地址访问的区域,一个访问代码段,一个访问数据段
参考:
http://blog.sina.com.cn/s/blog_7299958101011nwg.html
http://blog.****.net/kingkong529/article/details/5410444
http://blog.mcuol.com/User/zhjr1220/Article/18249_1.htm
((unsigned char volatile code *) 0) 和((unsigned char volatile xdata *) 0)
对于上面两条语句,是否在某种条件下,可以
((unsigned char volatile code *) (0)) =((unsigned char volatile xdata *) 0) ;具体有什么区别,能不能举个实例说明,谢谢
------解决方案--------------------
可以,两个地址的转换
------解决方案--------------------
1.
#define XBYTE ((unsigned char volatile xdata *) 0)
定义 XBYTE 为 指向 xdata 地址空间unsigned char 数据类型的指针,指针值为0 这样,可以直接用XBYTE[0xnnnn]或*(XBYTE+0xnnnn)访问外部RAM了。xdata 是 0 to 65535 范围内的一个 xdata 存储器
xdata ---> 可寻址片外ram (64k 地址范围)以 MOVX @DPTR 存取的外部数据存储器
2.
#define CBYTE ((unsigned char volatile code *) 0)
和上面的道理类似,不过code 是在 0000H .. 0FFFFH 之间的一个代码地址
code ---> 程序存储区 (64k 地址范围),以 MOVC @A+DPTR 读取的程序内存
我觉得,code xdata类型都是2Byte,也就说上面的两个指针,每次解引用,都是访问了2个字节。
区别是,他们的地址访问的区域,一个访问代码段,一个访问数据段
参考:
http://blog.sina.com.cn/s/blog_7299958101011nwg.html
http://blog.****.net/kingkong529/article/details/5410444
http://blog.mcuol.com/User/zhjr1220/Article/18249_1.htm