首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

100分请问- DataAbort exception!关于数据终止错误

2013-01-06 
100分请教---- DataAbort exception!----关于数据终止异常一般数据终止异常在编程方面是:指针操作错误,或

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;iSec<sec_temp+pArg->SectorsPerClust;iSec++)  
 {

  Rd_Block(iSec, 1, (U32*)FAT32_Buffer);
  Uart_Printf("iSec one of all sectors =%xh\n", iSec);
  
for(iDir=0;iDir<pArg->BytesPerSector;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;
}

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

现在我的解释只能是厂家提供的BSP还有问题,没有完全移植好。。。
[解决办法]
一定是软件问题。
LZ也说了屏蔽了一些代码,就正常了。
[解决办法]
你至少调试一下,看是哪一行代码引起了数据异常吧,这么多代码没头没尾的,又不能调试,别人怎么帮你看.
[解决办法]
Lz单步调试 一段一段代码仔细查查吧。。通常是内存越界造成的。。
[解决办法]
学了这么久的CPU,没用过仿真器,这样的话就用排除法吧,一句一句的试试。。。
[解决办法]
还有就是别人肯定不会帮你从代码中找出错误的,只能说说自已的经验,所以代码中的错误还得自已查。。。

热点排行