• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

于振南书上一个实验诡异的问题

蓝蓝的天 2020-02-24 浏览量:495

先上代码:


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);

 }

 else

 {

 printf("fail.\n");

 }

 printf("BBB\r\n");

return 0;

 //while(1);     

}   

定义了一个函数:

UINT8 znFAT_Enter_Dir2(INT8 *dirpathUINT32 *pClusterUINT32 *pos) 

功能是进入一个目录,获取目录的开始簇。

程序下载进去,用串口助手查看,如下:

1.jpg

只打印到AAA就停止了。

我在znFAT_Enter_Dir2这个函数内部也设置了好多打印语句,可是一句也没打印出来。

貌似进入该函数以后,出不来了,而且好像什么也没执行。

我感到很奇怪,百思不得其解。

还有一个问题,UINT8UINT32明明定义了,可是双击找定义的地方,提示:

2.jpg

求高手解惑,谢谢!

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 其实你可以先没有中文来调试,再加中文,中文信息因为采用不同的编码效果不同

    感觉你采用的是GB18030类似的编码体系。

    此外不同系统上处理目录分隔符是不一样的,比如dos/windows下是'\'其他系统上是'/'也有可能是这个原因,造成了目录访问不成功,注意文件分隔符其实仅仅用在人机交互上(显示和输入区分),在具体的文件系统上的目录结构处理中其实是不包括这个的。

    你需要查明相应库对文件目录区分标识符的定义,最好是把它变量化,中间需要的时候用它去拼凑完整路径描述,而不是写死(当然这会造成更多资源占用来处理相应问题)

    因为从你的输出来看,只输出了最底层目录,下级目录没有。

    • 发布于 2020-02-26
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:1
  • 首先将代码优化的功能关掉,因为代码优化之后,它的执行顺序会发生变化,然后在你觉得有问题的地方打断点,查看相关变量的值
    • 发布于2020-02-25
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

于振南书上一个实验诡异的问题