在目前的HI-TECH PICC中,BANK0.....BANK3这样的声明在默认情况下已经不起作用,编译器会根据RAM的使用情况尽量把变量全部安排在BANK0,我看了半天的用户手册测试也没有找到绝对定位的方法,相反,使用全局变量 unsigned long int A @ 0x70 这样的绝对定位却是非常有效的。以前的C教材中警告说这样的绝对定位编译器有可能不保留空间,转而会将其空间分配给其他变量,但目前还没发现编译器这样做,相反,如果0X70以前被别的变量占用,将0X70绝对定位后,原来占用该地址的变量被分配到其他空间。
这种绝对定位适用于多字节变量、数组、结构等多种形式,所定义的地址为数组或结构的第一字节地址
例如在下列声明中:
union CHUFA
{
struct
{
unsigned char BEICHU_1;
unsigned char BEICHU_2;
unsigned char BEICHU_3;
unsigned char BEICHU_4;
}BEI_CHU;
unsigned long int BEICHU2;
}BEICHU @ 0X70;
0x70为结构体成员 unsigned char BEICHU_1的地址,结构体下面的其他成员的地址依次递增,0X70也为联合体中的成员 unsigned long int BEICHU2 的首地址,同时也是整个联合体 BEICHU的首地址,整个联合体占用0X70--0X73 共4个字节RAM空间, |