搜索
bottom↓
回复: 0

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

[复制链接]

出0入0汤圆

发表于 2010-12-2 19:20:41 | 显示全部楼层 |阅读模式
其中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;
        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);
}是因为数组定义的太大了?还是因为什么,实在想不通了,恳请各位帮帮忙!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-21 00:02

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表