在PIC中使用常數(shù)指針
常數(shù)指針使用非常靈活,可以給編程帶來很多便利。
我測試過,PICC也支持常數(shù)指針,并且也會自動分頁,實在是一大喜事。
定義一個指向8位RAM數(shù)據(jù)的常數(shù)指針(起始為0x00):
#define DBYTE ((unsigned char volatile *) 0)
定義一個指向16位RAM數(shù)據(jù)的常數(shù)指針(起始為0x00):
#define CWORD ((unsigned int volatile *) 0)
((unsigned char volatile *) 0)中的0表示指向RAM區(qū)域的起始地址,可以靈活修改它。
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);
}