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,没用过仿真器,这样的话就用排除法吧,一句一句的试试。。。
[解决办法]
还有就是别人肯定不会帮你从代码中找出错误的,只能说说自已的经验,所以代码中的错误还得自已查。。。