先上代码:
UINT8 znFAT_Enter_Dir2(INT8 *dirpath,UINT32 *pCluster,UINT32 *pos)
{
UINT8 index=0,res=0;
UINT32 i=1;
// #ifndef USE_LFN
INT8 dirname[13];
// #else
// INT8 dirname[MAX_LFN_LEN+1];
// #endif
*pos=1;
*pCluster=2;
printf("000
");
if(('\'==dirpath[0] || '/'==dirpath[0]) && ' '==dirpath[1]) //Èç¹ûÊÇ"\"£¬ÔòÖ±½ÓÈ¡Ê×Ŀ¼´Ø£¬¼´µÚ2´Ø
{
printf("222
");
return ERR_SUCC;
}
//////////////////////////////
printf("111
");
while(' '!=dirpath
)
{
if('\'==dirpath || '/'==dirpath)
{
dirname[index]=' ';
index=0;
res=Get_Dir_Start_Cluster(dirname,pCluster);
if(res)
{
printf("333
");
return res; //·µ»Ø´íÎóÂë
}
*pos=i+1;
}
else
{
dirname[index]=dirpath;
index++;
#ifndef USE_LFN
if(index>12) //Èç¹û²»Ê¹Óó¤Ãû£¬ÔòĿ¼ÃûÒÔ¼°ÎļþÃû×²»Äܳ¬¹ý8+1+3
{
printf("444
");
return ERR_SFN_ILL_LEN; //Ŀ¼Ãû³¤ÓÚ8.3£¬Òà·ÀÖ¹dirnameÒç³ö
}
#else
if(index>MAX_LFN_LEN) //Èç¹ûʹÓó¤Ãû£¬ÔòĿ¼ÃûÒÔ¼°ÎļþÃû×²»Äܳ¬¹ýÉ趨µÄ³¤Ãû×³¤¶È
{
printf("555
");
return ERR_LFN_BUF_OUT; //Ŀ¼Ãû³¤ÓÚMAX_LFN_LEN£¬Òà·ÀÖ¹dirnameÒç³ö
}
#endif
}
i++;
}
printf("666
");
return ERR_SUCC; //³É¹¦
}
int main(void)
{
UINT32 res=0,len=0;
UINT32 i,j,n,x,y;
UINT8 temp;
UINT32 ncluster=0; //Ö¸¶¨Ä¿Â¼ÎªÊ×Ŀ¼
UINT32 *p;
delay_init();
uart_init(115200); //´®¿Ú³õʼ»¯Îª115200
printf("´®¿ÚÉèÖÃÍê±Ï
");
znFAT_Device_Init(); //´æ´¢É豸³õʼ»¯
printf("SD¿¨³õʼ»¯Íê±Ï
");
TFT_init2();
TFT_clear(0x001f);
TFT_GPIO_DeInit();
znFAT_Select_Device(0,&Init_Args); //Ñ¡ÔñÉ豸
TFT_init1();
TFT_clear(0x0000);
res=znFAT_Init(); //Îļþϵͳ³õʼ»¯
if(!res) //Îļþϵͳ³õʼ»¯³É¹¦
{
printf("Suc. to init FS
");
printf("BPB_Sector_No: %d",Init_Args.BPB_Sector_No);
printf("Total_SizeKB: %d",Init_Args.Total_SizeKB);
printf("BytesPerSector: %d",Init_Args.BytesPerSector);
printf("FATsectors: %d",Init_Args.FATsectors);
printf("SectorsPerClust: %d",Init_Args.SectorsPerClust);
printf("FirstFATSector: %d",Init_Args.FirstFATSector);
printf("FirstDirSector: %d",Init_Args.FirstDirSector);
printf("FSsec: %d",Init_Args.FSINFO_Sec);
printf("Next_Free_Cluster: %d",Init_Args.Next_Free_Cluster);
printf("FreenCluster: %d
",Init_Args.Free_nCluster);
}
else //Îļþϵͳ³õʼ»¯Ê§°Ü
{
printf("Fail to init FS , Err Code: %d",res);
}
printf("AAA
");
//if(!znFAT_Enter_Dir("\ABC\A\B\C\D\E\F\G\H\I\J\",&ncluster,p))
if(!znFAT_Enter_Dir2("\ABC\",&ncluster,p))
{
printf("start cluster is %d
",ncluster);
}
else
{
printf("fail.
");
}
printf("BBB
");
return 0;
//while(1);
}
定义了一个函数:
UINT8 znFAT_Enter_Dir2(INT8 *dirpath,UINT32 *pCluster,UINT32 *pos)
功能是进入一个目录,获取目录的开始簇。
程序下载进去,用串口助手查看,如下:
只打印到AAA就停止了。
我在znFAT_Enter_Dir2这个函数内部也设置了好多打印语句,可是一句也没打印出来。
貌似进入该函数以后,出不来了,而且好像什么也没执行。
我感到很奇怪,百思不得其解。
还有一个问题,UINT8,UINT32明明定义了,可是双击找定义的地方,提示:
求高手解惑,谢谢!
我贴了图片啦。现在知道问题了,用了野指针,*p
敢不分配地址,哈哈
一周热门 更多>