先上代码:
UINT8 znFAT_Enter_Dir2(INT8 *dirpathUINT32 *pClusterUINT32 *pos)
{
UINT8 index=0res=0;
UINT32 i=1;
// #ifndef USE_LFN
INT8 dirname[13];
// #else
// INT8 dirname[MAX_LFN_LEN+1];
// #endif
*pos=1;
*pCluster=2;
printf("000\r\n");
if(('\\'==dirpath[0] || '/'==dirpath[0]) && '\0'==dirpath[1]) //Èç¹ûÊÇ"\\"£¬ÔòÖ±½ÓÈ¡Ê×Ŀ¼´Ø£¬¼´µÚ2´Ø
printf("222\r\n");
return ERR_SUCC;
}
//////////////////////////////
printf("111\r\n");
while('\0'!=dirpath[i])
if('\\'==dirpath[i] || '/'==dirpath[i])
dirname[index]='\0';
index=0;
res=Get_Dir_Start_Cluster(dirnamepCluster);
if(res)
printf("333\r\n");
return res; //·µ»Ø´íÎóÂë
*pos=i+1;
else
dirname[index]=dirpath[i];
index++;
#ifndef USE_LFN
if(index>12) //Èç¹û²»Ê¹Óó¤Ãû£¬ÔòĿ¼ÃûÒÔ¼°ÎļþÃû×²»Äܳ¬¹ý8+1+3
printf("444\r\n");
return ERR_SFN_ILL_LEN; //Ŀ¼Ãû³¤ÓÚ8.3£¬Òà·ÀÖ¹dirnameÒç³ö
#else
if(index>MAX_LFN_LEN) //Èç¹ûʹÓó¤Ãû£¬ÔòĿ¼ÃûÒÔ¼°ÎļþÃû×²»Äܳ¬¹ýÉ趨µÄ³¤Ãû×³¤¶È
printf("555\r\n");
return ERR_LFN_BUF_OUT; //Ŀ¼Ãû³¤ÓÚMAX_LFN_LEN£¬Òà·ÀÖ¹dirnameÒç³ö
#endif
i++;
printf("666\r\n");
return ERR_SUCC; //³É¹¦
int main(void)
UINT32 res=0len=0;
UINT32 ijnxy;
UINT8 temp;
UINT32 ncluster=0; //Ö¸¶¨Ä¿Â¼ÎªÊ×Ŀ¼
UINT32 *p;
delay_init();
uart_init(115200); //´®¿Ú³õʼ»¯Îª115200
printf("´®¿ÚÉèÖÃÍê±Ï\r\n");
znFAT_Device_Init(); //´æ´¢É豸³õʼ»¯
printf("SD¿¨³õʼ»¯Íê±Ï\r\n");
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\r\n");
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\n"Init_Args.Free_nCluster);
else //Îļþϵͳ³õʼ»¯Ê§°Ü
printf("Fail to init FS Err Code: %d"res);
printf("AAA\r\n");
//if(!znFAT_Enter_Dir("\\ABC\\A\\B\\C\\D\\E\\F\\G\\H\\I\\J\\"&nclusterp))
if(!znFAT_Enter_Dir2("\\ABC\\"&nclusterp))
printf("start cluster is %d\n"ncluster);
printf("fail.\n");
printf("BBB\r\n");
return 0;
//while(1);
定义了一个函数:
功能是进入一个目录,获取目录的开始簇。
程序下载进去,用串口助手查看,如下:
只打印到AAA就停止了。
我在znFAT_Enter_Dir2这个函数内部也设置了好多打印语句,可是一句也没打印出来。
貌似进入该函数以后,出不来了,而且好像什么也没执行。
我感到很奇怪,百思不得其解。
还有一个问题,UINT8UINT32明明定义了,可是双击找定义的地方,提示:
求高手解惑,谢谢!
其实你可以先没有中文来调试,再加中文,中文信息因为采用不同的编码效果不同
感觉你采用的是GB18030类似的编码体系。
此外不同系统上处理目录分隔符是不一样的,比如dos/windows下是'\'其他系统上是'/'也有可能是这个原因,造成了目录访问不成功,注意文件分隔符其实仅仅用在人机交互上(显示和输入区分),在具体的文件系统上的目录结构处理中其实是不包括这个的。
你需要查明相应库对文件目录区分标识符的定义,最好是把它变量化,中间需要的时候用它去拼凑完整路径描述,而不是写死(当然这会造成更多资源占用来处理相应问题)
因为从你的输出来看,只输出了最底层目录,下级目录没有。