IAR FOR AVR 编译环境中将数据定义在FLASH中的方法
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
在产品开发过程中,我们可能需要一些小的字库,或者有一些提示用的字符串,这些数据按照通常的方法定义的话,则会占据RAM空间,对于RAM空间本来就很小的AVR单片机来说,就显得问题比较严重了,可能会导致数据空间不够。在这种情况下,我们可以将这些数据分配到FLASH中,引用时直接从FLASH中取出。
程序例子如下:
#include <ioavr.h>
__flash char s[10]={"0123456789"};
int main(void)
{
int i;
char a[10];
for(i=0;i<10;i++)
{
a = s;
}
}
此时对应的map文件显示:
从表中可以看出,有一段名为NEAR_F的段,属于代码空间的,且大小正好为10,应该就是所定义的数组s。因为,在数据空间中,我们没有看到有它的分配。
将编译后的代码进行模拟调试,并看反汇编窗口,如下图所示:
注意看a=s语句的等效汇编代码,其中有一条指令LPM R17,Z,就是根据Z寄存器(R31,R30)从代码空间中取出一个字节,存放到寄存器R17中。
通过这个方法,就成功地将常量数据存放到代码空间中。
2010年5月19日星期三
用户1653229 2011-10-11 23:22