#define XBYTE ((unsigned char volatile xdata *) 0)
2014-07-02 13:03
375 查看
今天在看别人的CAN总线程序的时候,突然发现了这么一句宏定义:#define XBYTE ((unsigned char volatile xdata *) 0),以前都没注意到过。后来查了一下,发现是在ABSACC.h这个头文件中的。这是C51中专有的东西,在C51编程中只要有外部扩展RAM,就得这样用。在51单片机中,RAM空间有内外之分,而内部RAM与外部256字节的RAM同地址,在有扩展外部RAM的系统中,有的会用上外部RAM的前256字节,有的前256字节没有用。以上的定义就是用上了前256字节,也就是说外部RAM从0地址开始寻址。
我看到过其他的C编程,通常是这么用的: *(unsigned char volatile xdata *)(0x3000)=0xFF这类的方式来进行对外部绝对地址的字节访问。其实XBYTE就相当于一个指向外部数据区的无符号字符型变量的指针(的名称,且当前的指针指向外部RAM的0地址),而在C里面指针一般和数组是可以混用的。可以直接用XBYTE[0xnnnn]或*(XBYTE+0xnnnn)访问外部RAM了。
我看到过其他的C编程,通常是这么用的: *(unsigned char volatile xdata *)(0x3000)=0xFF这类的方式来进行对外部绝对地址的字节访问。其实XBYTE就相当于一个指向外部数据区的无符号字符型变量的指针(的名称,且当前的指针指向外部RAM的0地址),而在C里面指针一般和数组是可以混用的。可以直接用XBYTE[0xnnnn]或*(XBYTE+0xnnnn)访问外部RAM了。
相关文章推荐
- #define XBYTE ((unsigned char volatile xdata * 收藏
- #define XBYTE ((unsigned char volatile xdata *)
- #define NFSTAT (*(volatile unsigned long *)0x4e000020) 与#define NFSTAT (*(volatile unsigned char *)
- #define XREG(addr) ((unsigned char volatile __xdata *) 0 )[addr]
- 枚举与define的区别和volatile关键字的作用
- Error:Error converting bytecode to dex: Cause: com.android.dex.DexException: Multiple dex files define Lcom/google/android/gms/internal/adp;
- #define barrier() __asm__ __volatile__("": : :"memory") 中的memory是gcc的东西
- byte转int的问题,unsigned char和char
- #define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r8")
- 理解#define SREG (*(volatile unsigned char *)0x5F)
- 如何理解 #define SREG (*(volatile unsigned char *)0x5F
- linux 下byte,char,unsigned char的区别
- C language 'define' skill similar to “#define rPGACON (*(volatile unsigned *) 0x48000000)”
- char 与 unsigned char(BYTE)的区别
- vC++中 char 与 unsigned char(BYTE)的具体区别?
- 将图像BYTE(unsigned char)数组转换为VARIANT类型
- #define IOPIN (*((volatile unsigned long *) 0xE0028000))
- (*(volatile unsigned char *)0x20)的意义(先记录下来)
- 如何将unsigned char*(或BYTE*)图像数据封装成OpenCV中Mat类型
- 枚举与define的区别和volatile关键字的作用