gushiyi 发表于 2010-12-2 19:20:41

谁能帮我看下这个程序是不是数组越界了呢?

其中flash驱动已经做好,可以实现读写,把HZK16放到了flash里边了,现在就是从flash里边把字库读出来,然后找到区位码,点阵显示汉字,但是程序一全速运行就死在
DataAbort
                B       DataAbort处,网上查了说是可能数组越界或指针错误,本人愚笨,哪位可以帮我分析下呢?先谢谢了!!
#include "config.h"
static uint8 state_16_EN;
uint8 HZ16;
/*********************************************************************************************************
********************************************************************************************************/
staticLOAD_16_HZ(void)   
    { int i;
      uint32 page=0,x=0,y=0;
      
      uint8 buf;
      state_16_EN=1;      //加载状态变量,在文字显示时,会检查该变量值,当为0时,将执行该方法
      for(page=0;page<523;page++)
      {
      Nand_io(page,buf,1);    //以页为单位读取字库数据
      for(i=0;i<512;i++)
      {HZ16=buf;
      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;
         data2=HZ16;
         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;
          }
   }
}   
intmain(void)
{
    Port_Init();
    UART_Select(0);   // 选择UART0
    UART_Init();      // 初始化UART0
    InitNandCfg();
    LcdTest();
   LcdDriver_PutString(50,50,"嵌入式系统");
   return(0);
}是因为数组定义的太大了?还是因为什么,实在想不通了,恳请各位帮帮忙!
页: [1]
查看完整版本: 谁能帮我看下这个程序是不是数组越界了呢?