|
在PIC中使用常数指针 常数指针使用非常灵活,可以给编程带来很多便利。
我测试过,PICC也支持常数指针,并且也会自动分页,实在是一大喜事。
定义一个指向8位RAM数据的常数指针(起始为0x00):
#define DBYTE ((unsigned char volatile *) 0)
定义一个指向16位RAM数据的常数指针(起始为0x00):
#define CWORD ((unsigned int volatile *) 0)
((unsigned char volatile *) 0)中的0表示指向RAM区域的起始地址,可以灵活修改它。
DBYTE[x]中的x表示偏移量。
下面是一段代码1:
char a1,a2,a3,a4;
#define DBYTE ((unsigned char volatile *) 0)
void main(void){ long cc=0x89abcdef; a1=DBYTE[0x24]; a2=DBYTE[0x25]; a3=DBYTE[0x26]; a4=DBYTE[0x27]; while(1); }
2:
char a1,a2,a3,a4;
#define DBYTE ((unsigned char volatile *) 0)
void pp(char y){ a1=DBYTE[y++]; a2=DBYTE[y++]; a3=DBYTE[y++]; a4=DBYTE[y]; }
void main(void){ long cc=0x89abcdef; char x; x=&cc; pp(x);
while(1); }
3:
char a1,a2,a3,a4;
#define DBYTE ((unsigned char volatile *) 0)
void pp(char y){ a1=DBYTE[y++]; a2=DBYTE[y++]; a3=DBYTE[y++]; a4=DBYTE[y]; }
void main(void){ bank1 static long cc=0x89abcdef; char x; x=&cc; pp(x); while(1); }
|