IAR中的变量可以定义在RAM中,也可以定义在FLASH和EEPROM中,可以用关键字__flash和__eeprom实现
。
flash变量只能读,不能写。也就是只能定义常量。
unsigned char __flash var1;
__flash unsigned char var2;
eeprom变量可以读也可以,但不支持定义变量时初始化赋值,定义时要在前面加上关键字 __no_init
,否则编译是会报错
__no_initunsigned char __eeprom var3;
__no_init __eeprom unsigned char var4;
定义的eeprom变量是默认是从eeprom的0x0地址开始存放。
定义绝对地址的flash常量的实现方法是:
unsigned char __flash var1@ 0x10 = 0xff;
__flash unsigned char var2 @ 0x10 = 0xff;
如果要定义绝对地址的eeprom变量可以这样实现:
__no_init __eeprom unsigned char var @ 0x10; // @后面是变量在EEPROM中存放的首地址
定义指向flash 空间地址的指针: unsigned char __flash *pt;
定义指向EEPROM空间地址的指针: unsigned char __eeprom *pt;
访问FLASH空间绝对地址 : 比如地址为0X1FFF
unsigned long res= *(unsigned long __farflash*)0X1FFF;
注意:访问 0-0xFFFF
(64 Kbytes) 空间用关键字 __flash
访问0-0x7FFFFF
(8 Mbytes) 空间用关键字 __farflash
访问EEPROM空间的绝对地址: 比如地址为0XFFC
unsignedlong res= *(unsigned long __eeprom*)0xFFC;