📄 xram.h
字号:
#ifndef xram_h
#define xram_h
//-----------------
#define al_d_p P0 //P0是地址低位兼数据
#define ah_p p2 //p2是地址高位
#define xram_max 0x7fff //外部ram最大地址 剩下的为网络地址
//--------------------
#define xram_write(val,add) *((volatile uchar xdata *)(add)) = val //写数据
#define xram_read(add) *((volatile uchar xdata *)(add)) //读数据
//-----------------
void xram_test();
#endif
#ifndef xram_c
#define xram_c
#endif
/*
外部xram范围0-0x7fff 高地址分配给网卡。
xram可以系统自动分配,但是网络地址不能这样。所以必须对指定地址进行读写。
在这里定义了2个宏,分别是读和写。 定义一个绝对地址 *((volatile uchar xdata *)(a))
其中a是一个数值,xdata表示数据存放类型,这里表示存放在外部,uchar表示是1个字节
volatile表示这个变量是特殊的,不要随便进行优化。综合起来就是先把a变成一个地址指针
既(uchar xdata *)a 然后再加一个*号,表示取这个指针所指向的数据。
其实系统在定义一些特殊积存器时候就是这么干的。假设一个16位特殊积存器a-reg,他的地址是0xaa
器件头文件中会这样声明:#define a_reg *((volatile uint data *)(0xaa))
定义以后就可以直接用a_reg=0x1155,或者 b=a_reg 来操作这个积存器。
------------------huangqi412
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -