打印

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

[复制链接]
1220|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gushiyi|  楼主 | 2010-12-2 19:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ui, ST, TI, flash, ge
其中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);
}是因为数组定义的太大了?还是因为什么,实在想不通了,恳请各位帮帮忙!

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

41

帖子

1

粉丝