4765|10

65

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

100分请教---- DataAbort exception!----关于数据终止异常 [复制链接]

            一般数据终止异常在编程方面是:指针操作错误,或者数组越界等等!而我现在一下的程序(在S3C2440裸奔时)就是看不出哪里造成数据终止异常,现在请教各位大侠!
struct FAT_Init_Arg Init_Arg_SD;       
struct FAT_Init_Arg *pArg=NULL;

UINT32 FAT_Enter_Dir(INT8 *path)
{
UINT32 Cur_Clust=0,sec_temp=0,iSec=0,iDir=0,Old_Clust=0;
UINT8 i=1,counter=0,flag=0;                     
struct direntry *pDir=NULL;
INT8 name[20]={0};

  INT8 *Mypath=NULL;
  Mypath=(INT8 *)malloc(30);
  Mypath=path;
  pDir=malloc(sizeof(struct direntry));

pArg=&Init_Arg_SD;
Cur_Clust=pArg->FirstDirClust;  

  if(*(Mypath+1)==0 && *(Mypath+0)=='\\')
      {
          Uart_Printf("*(Mypath+1)=%xh,*(Mypath+0)=%xh \n",  *(Mypath+1),*(Mypath+0));
           return Cur_Clust;
          }
  
else                                         
{
        
  while(*(Mypath+i)!=0)
  {

   if(*(Mypath+i)=='\\')        
   {
   
      for(;counter<8;counter++)  
        {
         name[counter]=' ';           
        }
        name[counter]=0;            
        counter=0;                    
               
        do
        {
         sec_temp=(SOC(Cur_Clust));
         for(iSec=sec_temp;iSecSectorsPerClust;iSec++)  
         {

          Rd_Block(iSec, 1, (U32*)FAT32_Buffer);
          Uart_Printf("iSec one of all sectors =%xh\n", iSec);
          
        for(iDir=0;iDirBytesPerSector;iDir+=sizeof(struct direntry))
      {
       pDir=((struct direntry *)(FAT32_Buffer+iDir));
           if(Compare_Dir_Name((INT8*)pDir->deName,(INT8*)name))     
           {
                    flag=1;                     
                 
                Cur_Clust=pDir->deLowCluster[0]+(pDir->deLowCluster[1]<<8)+(pDir->deHighClust[0]<<16)+(pDir->deHighClust[1]<<24);
                iDir=pArg->BytesPerSector;
                iSec=sec_temp+pArg->SectorsPerClust;
           }
          }
          
         }
         Old_Clust=Cur_Clust;        
        }while(!flag && (Cur_Clust=FAT32_GetNextCluster(Cur_Clust))!=0x0fffffff);
       
        if(!flag)
        {
         temp_dir_cluster=Old_Clust;
         strcpy(temp_dir_name,name);
         flag=0;
         free(pDir);
         free(Mypath);
         return 0;            
        }
        flag=0;

   }
   else
   {
    name[counter++]=(L2U(*(Mypath+i)));
    Uart_Printf("*(Mypath+i)=%xh ,i=%d \n",  *(Mypath+i),i);
   }
   i++;
  }
}


name[counter]=0;
flag=1;
temp_dir_cluster=Cur_Clust;
strcpy(temp_dir_name,name);

  free(pDir);
  free(Mypath);
return Cur_Clust;
}

而当我把红色的代码屏蔽之后,就没出现数据终止异常。

最新回复

改天与俺的哥们借个仿真器用用,或者自己找找原因啦……嘿嘿  详情 回复 发表于 2010-6-10 13:23
点赞 关注

回复
举报

48

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
我也出现过这种错误,仅将我的经验说说:
我的是基于wince5.0的,每次在platform builder 5.0下执行了Build and sysgen current BSP后使用bootloader引导下载OS内核时还事,但当内核全部放入SDRAM后,要执行时就会出现数据中止异常,当然开始的时候不知道是执行了Build and sysgen current BSP的缘故,后来经过排除法才确定了是这个原因。

现在我的解释只能是厂家提供的BSP还有问题,没有完全移植好。。。
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我的程序不是基于PB编译平台,在ADS1.2编译平台下的,我想我的程序出现 数据终止异常,应该不会是硬件问题吧,因为在软件上,当屏蔽了其中一些代码后,就不会出现异常。在线期待大侠们的回答 .
 
 
 

回复

53

帖子

0

TA的资源

一粒金砂(初级)

4
 
一定是软件问题。
LZ也说了屏蔽了一些代码,就正常了。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

5
 
你至少调试一下,看是哪一行代码引起了数据异常吧,这么多代码没头没尾的,又不能调试,别人怎么帮你看.
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

6
 
Lz单步调试 一段一段代码仔细查查吧。。通常是内存越界造成的。。
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

7
 
在没有仿真器的情况下,不能单步实现,一直以串口打印信息,比较难精确找到出错的地方
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

8
 
学了这么久的CPU,没用过仿真器,这样的话就用排除法吧,一句一句的试试。。。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

9
 
还有就是别人肯定不会帮你从代码中找出错误的,只能说说自已的经验,所以代码中的错误还得自已查。。。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

10
 
仿真器以前有此资源,在底层驱动调试中仿真器还是比较好用的,而现在没有,CPU出现异常的情况下缺乏仿真器确实不好调试,好吧,咱们现就结贴吧,非常感谢上面大侠的经验分享。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

11
 
改天与俺的哥们借个仿真器用用,或者自己找找原因啦……嘿嘿
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表