其中flash驱动已经做好,可以实现读写,把HZK16放到了flash里边了,现在就是从flash里边把字库读出来,然后找到区位码,点阵显示汉字,但是程序一全速运行就死在
DataAbort
B DataAbort处,网上查了说是可能数组越界或指针错误,本人愚笨,哪位可以帮我分析下呢?先谢谢了!!
#include "config.h"
static uint8 state_16_EN;
uint8 HZ16[8363][32];
/*********************************************************************************************************
********************************************************************************************************/
static LOAD_16_HZ(void)
{ int i;
uint32 page=0,x=0,y=0;
uint8 buf[512];
state_16_EN=1; //加载状态变量,在文字显示时,会检查该变量值,当为0时,将执行该方法
for(page=0;page<523;page++)
{
Nand_io(page,buf,1); //以页为单位读取字库数据
for(i=0;i<512;i++)
{HZ16[x][y++]=buf[i];
if(y>=32) //判断该字库的行的加载范围是否超出
{
x++;
y=0;
}
}
}
}
static LcdDriver_PutHZ(int x,int y,char *ascii_codes)
{
uint8 i,j,k=0;
static uint8 qh=0,wh=0;
static uint8 data1,data2,data;
static uint16 offset;
char *p;
p=ascii_codes;
qh=(*p++)-0xA0; //获得区码
wh=*p-0xA0; //获得位码
offset=(94*(qh-1)+(wh-1))*32;
if(state_16_EN==0) LOAD_16_HZ();
for(j=0;j<16;j++)
{
data1=HZ16[offset][k++];
data2=HZ16[offset][k++];
data=(data1<<8)|data2;
for(i=0;i<16;i++)
{
if(data&(32768>>i))
PutPixel(x+i,y+j,0xffff); //显示前景色
else
PutPixel(x+i,y+j,0x0000); //显示背景色
}
}
}
static LcdDriver_PutString(int x,int y,char *p)
{
uint16 i=0,j=0;
uint16 k;
uint8 width=16;
k=i+x;
while(*p!='\0') //循环显示文字
{
if((*p)>=128) //如果要显示的文字为汉字
{
if(320-k<=width) //判断是否需要换行
{
j+=width;
k=0;
}
LcdDriver_PutHZ(k,y+j,p) ;
p+=2;
k+=width;
}
}
}
int main(void)
{
Port_Init();
UART_Select(0); // 选择UART0
UART_Init(); // 初始化UART0
InitNandCfg();
LcdTest();
LcdDriver_PutString(50,50,"嵌入式系统");
return(0);
}是因为数组定义的太大了?还是因为什么,实在想不通了,恳请各位帮帮忙! |