avr 单片机怎么把数组放到flash里,不占用ram

我用的是gcc初学,希望大家多多帮助啊~~~unsignedcharLCDBUFF_A[128*8];//显示换冲区1unsignedcharLCDBUFF_B[128*... 我用的是gcc 初学,希望大家多多帮助啊~~~
unsigned char LCDBUFF_A[128*8];//显示换冲区1
unsigned char LCDBUFF_B[128*8];//显示换冲区2
我用的avr128,ram有4k, 这样的话ran就占用了2k了,我想把他放到flash里该怎么做呢,
//功能:在LCD指定位置显示一个字符或汉字
//说明:X水平坐标,Y行坐标,取值范围:0<X<128,0<Y<7.
//输入:X水平坐标,Y行坐标,反显1,正常0.
//输出:无
//------------------------------------------------------------------------------------------------------
void LCD_write_acsii_1212(unsigned char x, unsigned char y, unsigned char *str,unsigned char state)
{
unsigned char i ,ascii,c1,c2;
unsigned int j;
if ((*str)<128)//字母编码
{
ascii = (*str)-0x20;
if((x<=121)&&(y<=6))//防止越界
{
for (i=0;i<6;i++)
{
if (state==0)
LCDBUFF_A[y*128+x+i]=pgm_read_byte(i+ASC1212+(ascii * 12));
else
LCDBUFF_A[y*128+x+i]=~pgm_read_byte(i+ASC1212+(ascii * 12));

}
for (i=0;i<6;i++)
{
if (state==0)
LCDBUFF_A[(y+1)*128+x+i]=pgm_read_byte(i+6+ASC1212+(ascii * 12));
else
LCDBUFF_A[(y+1)*128+x+i]=~pgm_read_byte(i+6+ASC1212+(ascii * 12));
}
}//
}
else//汉字编码
{
if((x<=115)&&(y<=6))//防止越界
{
c1=(*str);c2=*(str+1);//读机内码
for (j=0;j<sizeof(GB_12)/sizeof(GB_12[0]);j++)
{
if(c1==pgm_read_byte_far(&GB_12[j].Index[0]) && c2==pgm_read_byte_far(&GB_12[j].Index[1]))
break; //汉字找到则跳出

}
if(j<sizeof(GB_12)/sizeof(GB_12[0]))//如果字模存在
{
for (i=0;i<12;i++)
{
if (state==0)
LCDBUFF_A[y*128+x+i]= pgm_read_byte_far(i+&GB_12[j].Msk[0]);
else
LCDBUFF_A[y*128+x+i]=~pgm_read_byte_far(i+&GB_12[j].Msk[0]);
}
for (i=0;i<12;i++)
{
if (state==0)
LCDBUFF_A[(y+1)*128+x+i]= pgm_read_byte_far(i+&GB_12[j].Msk[12]);
else
LCDBUFF_A[(y+1)*128+x+i]=~pgm_read_byte_far(i+&GB_12[j].Msk[12]);
}
}
}
}
}
我的邮箱 dpedison@sohu.com
展开
 我来答
sanjinluo
2010-02-09 · TA获得超过4714个赞
知道大有可为答主
回答量:3402
采纳率:0%
帮助的人:2398万
展开全部
你用什么软件呀 用AVR WIN的话可以这样定义
#include <avr/pgmspace.h>//加载头文件
const prog_uchar zifu[] = { //定义数组到FLASH
/* */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/*! */
0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x18,0x18,0x00,0x00,
}

调用的时候 使用pgm_read_byte(zifu+i+16*asc)) 你可以看一下头文件或者相关的书籍
百度网友b04b15b3b
2010-02-09 · TA获得超过1360个赞
知道小有建树答主
回答量:894
采纳率:0%
帮助的人:706万
展开全部
我用的是IAR AVR
__flash unsigned int a[]={};
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wizard2008
2010-02-09 · TA获得超过1365个赞
知道小有建树答主
回答量:1822
采纳率:0%
帮助的人:805万
展开全部
直接问技术支持。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式